For #27026 - Use the wallpaper adapted text color for the Collections placeholder

This commit is contained in:
Gabriel Luong 2022-09-15 17:10:50 -04:00 committed by mergify[bot]
parent fba46517ff
commit 444f663143
3 changed files with 46 additions and 9 deletions

View File

@ -317,6 +317,7 @@ class SessionControlAdapter(
view,
viewLifecycleOwner,
components.core.store,
components.appStore,
interactor,
)
OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view)

View File

@ -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 {

View File

@ -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 {