diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt index 00cd652b6d..dd14e3a593 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt @@ -317,6 +317,7 @@ class SessionControlAdapter( view, viewLifecycleOwner, components.core.store, + components.appStore, interactor, ) OnboardingHeaderViewHolder.LAYOUT_ID -> OnboardingHeaderViewHolder(view) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolder.kt index 834a0443d6..907aaa8f0e 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolder.kt @@ -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 { diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolderTest.kt index 08dc33e13b..dea4f6059f 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/NoCollectionsMessageViewHolderTest.kt @@ -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 {