For #27026 - Use the wallpaper adapted text color for the Collections placeholder
This commit is contained in:
parent
fba46517ff
commit
444f663143
|
@ -317,6 +317,7 @@ class SessionControlAdapter(
|
|||
view,
|
||||
viewLifecycleOwner,
|
||||
components.core.store,
|
||||
components.appStore,
|
||||
interactor,
|
||||
)
|
||||
OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view)
|
||||
|
|
|
@ -5,26 +5,28 @@
|
|||
package org.mozilla.fenix.home.sessioncontrol.viewholders
|
||||
|
||||
import android.view.View
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.map
|
||||
import mozilla.components.browser.state.selector.normalTabs
|
||||
import mozilla.components.browser.state.store.BrowserStore
|
||||
import mozilla.components.lib.state.ext.flowScoped
|
||||
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
||||
import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.components.AppStore
|
||||
import org.mozilla.fenix.databinding.NoCollectionsMessageBinding
|
||||
import org.mozilla.fenix.ext.increaseTapArea
|
||||
import org.mozilla.fenix.home.sessioncontrol.CollectionInteractor
|
||||
import org.mozilla.fenix.utils.view.ViewHolder
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
open class NoCollectionsMessageViewHolder(
|
||||
class NoCollectionsMessageViewHolder(
|
||||
view: View,
|
||||
viewLifecycleOwner: LifecycleOwner,
|
||||
store: BrowserStore,
|
||||
appStore: AppStore,
|
||||
interactor: CollectionInteractor,
|
||||
) : ViewHolder(view) {
|
||||
|
||||
|
@ -32,7 +34,6 @@ open class NoCollectionsMessageViewHolder(
|
|||
val binding = NoCollectionsMessageBinding.bind(view)
|
||||
|
||||
binding.addTabsToCollectionsButton.apply {
|
||||
|
||||
setOnClickListener {
|
||||
interactor.onAddTabsToCollectionTapped()
|
||||
}
|
||||
|
@ -55,6 +56,30 @@ open class NoCollectionsMessageViewHolder(
|
|||
binding.addTabsToCollectionsButton.isVisible = tabs > 0
|
||||
}
|
||||
}
|
||||
|
||||
appStore.flowScoped(viewLifecycleOwner) { flow ->
|
||||
flow.map { state -> state.wallpaperState.currentWallpaper.textColor }
|
||||
.ifChanged()
|
||||
.collect { textColor ->
|
||||
if (textColor == null) {
|
||||
val context = view.context
|
||||
binding.noCollectionsHeader.setTextColor(
|
||||
context.getColorFromAttr(R.attr.textPrimary),
|
||||
)
|
||||
binding.noCollectionsDescription.setTextColor(
|
||||
context.getColorFromAttr(R.attr.textSecondary),
|
||||
)
|
||||
binding.removeCollectionPlaceholder.setColorFilter(
|
||||
context.getColorFromAttr(R.attr.textPrimary),
|
||||
)
|
||||
} else {
|
||||
val color = Color(textColor).toArgb()
|
||||
binding.noCollectionsHeader.setTextColor(color)
|
||||
binding.noCollectionsDescription.setTextColor(color)
|
||||
binding.removeCollectionPlaceholder.setColorFilter(color)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.junit.Assert.assertTrue
|
|||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mozilla.fenix.components.AppStore
|
||||
import org.mozilla.fenix.databinding.NoCollectionsMessageBinding
|
||||
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||
import org.mozilla.fenix.home.sessioncontrol.CollectionInteractor
|
||||
|
@ -35,10 +36,14 @@ class NoCollectionsMessageViewHolderTest {
|
|||
)
|
||||
private lateinit var lifecycleOwner: LifecycleOwner
|
||||
private lateinit var interactor: CollectionInteractor
|
||||
private lateinit var appStore: AppStore
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
binding = NoCollectionsMessageBinding.inflate(LayoutInflater.from(testContext))
|
||||
|
||||
appStore = AppStore()
|
||||
|
||||
lifecycleOwner = mockk(relaxed = true)
|
||||
interactor = mockk(relaxed = true)
|
||||
}
|
||||
|
@ -46,21 +51,27 @@ class NoCollectionsMessageViewHolderTest {
|
|||
@Test
|
||||
fun `hide add to collection button when there are no tabs open`() {
|
||||
val noTabsStore = BrowserStore()
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, noTabsStore, interactor)
|
||||
NoCollectionsMessageViewHolder(
|
||||
binding.root,
|
||||
lifecycleOwner,
|
||||
noTabsStore,
|
||||
appStore,
|
||||
interactor,
|
||||
)
|
||||
|
||||
assertFalse(binding.addTabsToCollectionsButton.isVisible)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `show add to collection button when there are tabs`() {
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, interactor)
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, appStore, interactor)
|
||||
|
||||
assertTrue(binding.addTabsToCollectionsButton.isVisible)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `call interactor on click`() {
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, interactor)
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, appStore, interactor)
|
||||
|
||||
binding.addTabsToCollectionsButton.performClick()
|
||||
verify { interactor.onAddTabsToCollectionTapped() }
|
||||
|
@ -68,7 +79,7 @@ class NoCollectionsMessageViewHolderTest {
|
|||
|
||||
@Test
|
||||
fun `hide view and change setting on remove placeholder click`() {
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, interactor)
|
||||
NoCollectionsMessageViewHolder(binding.root, lifecycleOwner, store, appStore, interactor)
|
||||
|
||||
binding.removeCollectionPlaceholder.performClick()
|
||||
verify {
|
||||
|
|
Loading…
Reference in New Issue