From bc5683eab69bb8674f95a04832811242e57ecac7 Mon Sep 17 00:00:00 2001 From: Chris Banes Date: Tue, 1 Dec 2020 15:52:15 +0000 Subject: [PATCH] Fix theme changing from preference --- .../main/java/app/tivi/home/MainActivity.kt | 6 ++- .../java/app/tivi/settings/TiviPreferences.kt | 7 ++- .../compose/TiviPreferenceExtensions.kt | 32 +++++++++++++ .../app/tivi/account/AccountUiFragment.kt | 6 ++- .../tivi/home/discover/DiscoverFragment.kt | 5 ++- .../episodedetails/EpisodeDetailsFragment.kt | 5 ++- .../tivi/home/followed/FollowedFragment.kt | 5 ++- .../tivi/home/popular/PopularShowsFragment.kt | 5 ++- .../recommended/RecommendedShowsFragment.kt | 5 ++- .../app/tivi/home/search/SearchFragment.kt | 7 ++- .../app/tivi/settings/TiviPreferencesImpl.kt | 45 ++++++++++++------- .../details/ShowDetailsFragment.kt | 5 ++- .../home/trending/TrendingShowsFragment.kt | 5 ++- .../app/tivi/home/watched/WatchedFragment.kt | 7 ++- 14 files changed, 117 insertions(+), 28 deletions(-) create mode 100644 common-ui-compose/src/main/java/app/tivi/common/compose/TiviPreferenceExtensions.kt diff --git a/app/src/main/java/app/tivi/home/MainActivity.kt b/app/src/main/java/app/tivi/home/MainActivity.kt index 66e932c1e3..509d3424f8 100644 --- a/app/src/main/java/app/tivi/home/MainActivity.kt +++ b/app/src/main/java/app/tivi/home/MainActivity.kt @@ -30,10 +30,12 @@ import androidx.navigation.NavController import app.tivi.AppNavigator import app.tivi.R import app.tivi.TiviActivity +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.databinding.ActivityMainBinding import app.tivi.extensions.MultipleBackStackNavigation import app.tivi.extensions.hideSoftInput +import app.tivi.settings.TiviPreferences import app.tivi.trakt.TraktConstants import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.ProvideWindowInsets @@ -50,6 +52,8 @@ class MainActivity : TiviActivity() { @Inject lateinit var navigator: AppNavigator + @Inject lateinit var preferences: TiviPreferences + private var currentSelectedItem by mutableStateOf(HomeNavigation.Discover) private lateinit var multiBackStackNavigation: MultipleBackStackNavigation @@ -89,7 +93,7 @@ class MainActivity : TiviActivity() { binding.homeBottomNavigation.setContent { ProvideWindowInsets { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { HomeBottomNavigation( selectedNavigation = currentSelectedItem, onNavigationSelected = { item -> diff --git a/base/src/main/java/app/tivi/settings/TiviPreferences.kt b/base/src/main/java/app/tivi/settings/TiviPreferences.kt index c182233ea9..01802beee5 100644 --- a/base/src/main/java/app/tivi/settings/TiviPreferences.kt +++ b/base/src/main/java/app/tivi/settings/TiviPreferences.kt @@ -16,12 +16,17 @@ package app.tivi.settings +import kotlinx.coroutines.flow.Flow + interface TiviPreferences { fun setup() - var themePreference: Theme + var theme: Theme + fun observeTheme(): Flow + var useLessData: Boolean + fun observeUseLessData(): Flow enum class Theme { LIGHT, diff --git a/common-ui-compose/src/main/java/app/tivi/common/compose/TiviPreferenceExtensions.kt b/common-ui-compose/src/main/java/app/tivi/common/compose/TiviPreferenceExtensions.kt new file mode 100644 index 0000000000..db62bdc267 --- /dev/null +++ b/common-ui-compose/src/main/java/app/tivi/common/compose/TiviPreferenceExtensions.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package app.tivi.common.compose + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import app.tivi.settings.TiviPreferences + +@Composable +fun TiviPreferences.shouldUseDarkColors(): Boolean { + val themePreference = observeTheme().collectAsState(initial = TiviPreferences.Theme.SYSTEM) + return when (themePreference.value) { + TiviPreferences.Theme.LIGHT -> false + TiviPreferences.Theme.DARK -> true + else -> isSystemInDarkTheme() + } +} diff --git a/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt b/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt index 6a27e2750e..db6f60deaa 100644 --- a/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt +++ b/ui-account/src/main/java/app/tivi/account/AccountUiFragment.kt @@ -31,8 +31,10 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientTiviDateFormatter +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.navigateToNavDestination +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -50,6 +52,8 @@ class AccountUiFragment : DialogFragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter + @Inject lateinit var preferences: TiviPreferences + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -66,7 +70,7 @@ class AccountUiFragment : DialogFragment() { AmbientTiviDateFormatter provides tiviDateFormatter, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { AccountUi(viewState!!) { diff --git a/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt b/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt index 20ca219846..be8a851bc8 100644 --- a/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt +++ b/ui-discover/src/main/java/app/tivi/home/discover/DiscoverFragment.kt @@ -31,8 +31,10 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientTiviDateFormatter +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -46,6 +48,7 @@ import javax.inject.Inject class DiscoverFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var textCreator: DiscoverTextCreator + @Inject lateinit var preferences: TiviPreferences private val viewModel: DiscoverViewModel by viewModels() @@ -68,7 +71,7 @@ class DiscoverFragment : Fragment() { AmbientDiscoverTextCreator provides textCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { Discover( diff --git a/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt b/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt index 67682a5ab7..7fb0dcd863 100644 --- a/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt +++ b/ui-episodedetails/src/main/java/app/tivi/episodedetails/EpisodeDetailsFragment.kt @@ -31,8 +31,10 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientTiviDateFormatter +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.viewModelProviderFactoryOf +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -46,6 +48,7 @@ import javax.inject.Inject @AndroidEntryPoint class EpisodeDetailsFragment : Fragment() { @Inject internal lateinit var vmFactory: EpisodeDetailsViewModel.Factory + @Inject lateinit var preferences: TiviPreferences companion object { private const val ARG_KEY_ID = "episode_id" @@ -85,7 +88,7 @@ class EpisodeDetailsFragment : Fragment() { AmbientTiviDateFormatter provides tiviDateFormatter, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { EpisodeDetails(viewState!!) { diff --git a/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt b/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt index bbae84f419..9c5e053642 100644 --- a/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt +++ b/ui-followed/src/main/java/app/tivi/home/followed/FollowedFragment.kt @@ -33,9 +33,11 @@ import androidx.navigation.fragment.findNavController import androidx.paging.compose.collectAsLazyPagingItems import app.tivi.common.compose.AmbientHomeTextCreator import app.tivi.common.compose.AmbientTiviDateFormatter +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.home.HomeTextCreator +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -49,6 +51,7 @@ import javax.inject.Inject class FollowedFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var homeTextCreator: HomeTextCreator + @Inject lateinit var preferences: TiviPreferences private val viewModel: FollowedViewModel by viewModels() @@ -71,7 +74,7 @@ class FollowedFragment : Fragment() { AmbientHomeTextCreator provides homeTextCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { Followed( diff --git a/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt b/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt index ca900b486f..1b45cc3a4f 100644 --- a/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt +++ b/ui-popular/src/main/java/app/tivi/home/popular/PopularShowsFragment.kt @@ -31,9 +31,11 @@ import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientHomeTextCreator import app.tivi.common.compose.AmbientTiviDateFormatter import app.tivi.common.compose.paging.collectAsLazyPagingItems +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.home.HomeTextCreator +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -47,6 +49,7 @@ import javax.inject.Inject class PopularShowsFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var homeTextCreator: HomeTextCreator + @Inject lateinit var preferences: TiviPreferences private val pendingActions = Channel(Channel.BUFFERED) @@ -73,7 +76,7 @@ class PopularShowsFragment : Fragment() { AmbientHomeTextCreator provides homeTextCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { Popular( lazyPagingItems = pagedList.collectAsLazyPagingItems { old, new -> old.entry.id == new.entry.id diff --git a/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt b/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt index a89bf67036..4994dc1935 100644 --- a/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt +++ b/ui-recommended/src/main/java/app/tivi/home/recommended/RecommendedShowsFragment.kt @@ -31,9 +31,11 @@ import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientHomeTextCreator import app.tivi.common.compose.AmbientTiviDateFormatter import app.tivi.common.compose.paging.collectAsLazyPagingItems +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.home.HomeTextCreator +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -47,6 +49,7 @@ import javax.inject.Inject class RecommendedShowsFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var homeTextCreator: HomeTextCreator + @Inject lateinit var preferences: TiviPreferences private val pendingActions = Channel(Channel.BUFFERED) @@ -73,7 +76,7 @@ class RecommendedShowsFragment : Fragment() { AmbientHomeTextCreator provides homeTextCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { Recommended( lazyPagingItems = pagedList.collectAsLazyPagingItems { old, new -> old.entry.id == new.entry.id diff --git a/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt b/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt index 5ba68ac2fb..579241c17f 100644 --- a/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt +++ b/ui-search/src/main/java/app/tivi/home/search/SearchFragment.kt @@ -31,15 +31,20 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import app.tivi.common.compose.LogCompositions +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions +import app.tivi.settings.TiviPreferences import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets import dev.chrisbanes.accompanist.insets.ViewWindowInsetObserver import kotlinx.coroutines.channels.Channel +import javax.inject.Inject @AndroidEntryPoint internal class SearchFragment : Fragment() { + @Inject lateinit var preferences: TiviPreferences + private val viewModel: SearchViewModel by viewModels() private val pendingActions = Channel(Channel.BUFFERED) @@ -74,7 +79,7 @@ internal class SearchFragment : Fragment() { setContent { Providers(AmbientWindowInsets provides windowInsets) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { LogCompositions("ViewState observeAsState") diff --git a/ui-settings/src/main/java/app/tivi/settings/TiviPreferencesImpl.kt b/ui-settings/src/main/java/app/tivi/settings/TiviPreferencesImpl.kt index 6aa1223598..2b8775d1ff 100644 --- a/ui-settings/src/main/java/app/tivi/settings/TiviPreferencesImpl.kt +++ b/ui-settings/src/main/java/app/tivi/settings/TiviPreferencesImpl.kt @@ -21,6 +21,12 @@ import android.content.SharedPreferences import androidx.core.content.edit import app.tivi.settings.TiviPreferences.Theme import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import javax.inject.Inject import javax.inject.Named @@ -28,25 +34,24 @@ class TiviPreferencesImpl @Inject constructor( @ApplicationContext private val context: Context, @Named("app") private val sharedPreferences: SharedPreferences ) : TiviPreferences { + private val defaultThemeValue = context.getString(R.string.pref_theme_default_value) + + private val preferenceKeyChangedFlow = MutableSharedFlow(extraBufferCapacity = 1) + private val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - when (key) { - KEY_THEME -> updateUsingThemePreference() - } + preferenceKeyChangedFlow.tryEmit(key) } - private val defaultThemeValue = context.getString(R.string.pref_theme_default_value) - companion object { const val KEY_THEME = "pref_theme" const val KEY_DATA_SAVER = "pref_data_saver" } override fun setup() { - updateUsingThemePreference() sharedPreferences.registerOnSharedPreferenceChangeListener(listener) } - override var themePreference: Theme + override var theme: Theme get() = getThemeForStorageValue(sharedPreferences.getString(KEY_THEME, defaultThemeValue)!!) set(value) = sharedPreferences.edit { putString(KEY_THEME, value.storageKey) @@ -58,6 +63,24 @@ class TiviPreferencesImpl @Inject constructor( putBoolean(KEY_DATA_SAVER, value) } + override fun observeUseLessData(): Flow { + return preferenceKeyChangedFlow + // Emit on start so that we always send the initial value + .onStart { emit(KEY_DATA_SAVER) } + .filter { it == KEY_DATA_SAVER } + .map { useLessData } + .distinctUntilChanged() + } + + override fun observeTheme(): Flow { + return preferenceKeyChangedFlow + // Emit on start so that we always send the initial value + .onStart { emit(KEY_THEME) } + .filter { it == KEY_THEME } + .map { theme } + .distinctUntilChanged() + } + private val Theme.storageKey: String get() = when (this) { Theme.LIGHT -> context.getString(R.string.pref_theme_light_value) @@ -70,12 +93,4 @@ class TiviPreferencesImpl @Inject constructor( context.getString(R.string.pref_theme_dark_value) -> Theme.DARK else -> Theme.SYSTEM } - - private fun updateUsingThemePreference() { - // when (themePreference) { - // Theme.DARK -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - // Theme.LIGHT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - // Theme.SYSTEM -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) - // } - } } diff --git a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt index 963219aec4..94aef0b74e 100644 --- a/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt +++ b/ui-showdetails/src/main/java/app/tivi/showdetails/details/ShowDetailsFragment.kt @@ -32,9 +32,11 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.navOptions import app.tivi.common.compose.LogCompositions +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.extensions.viewModelProviderFactoryOf +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -49,6 +51,7 @@ class ShowDetailsFragment : Fragment() { @Inject internal lateinit var vmFactory: ShowDetailsFragmentViewModel.Factory @Inject internal lateinit var textCreator: ShowDetailsTextCreator @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter + @Inject lateinit var preferences: TiviPreferences private val pendingActions = Channel(Channel.BUFFERED) @@ -121,7 +124,7 @@ class ShowDetailsFragment : Fragment() { AmbientShowDetailsTextCreator provides textCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { LogCompositions("ViewState observeAsState") diff --git a/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt b/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt index 8f9f5bc50f..526a2ce8b4 100644 --- a/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt +++ b/ui-trending/src/main/java/app/tivi/home/trending/TrendingShowsFragment.kt @@ -31,9 +31,11 @@ import androidx.navigation.fragment.findNavController import app.tivi.common.compose.AmbientHomeTextCreator import app.tivi.common.compose.AmbientTiviDateFormatter import app.tivi.common.compose.paging.collectAsLazyPagingItems +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.home.HomeTextCreator +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -47,6 +49,7 @@ import javax.inject.Inject class TrendingShowsFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var homeTextCreator: HomeTextCreator + @Inject lateinit var preferences: TiviPreferences private val pendingActions = Channel(Channel.BUFFERED) @@ -73,7 +76,7 @@ class TrendingShowsFragment : Fragment() { AmbientHomeTextCreator provides homeTextCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { Trending( lazyPagingItems = pagedList.collectAsLazyPagingItems { old, new -> old.entry.id == new.entry.id diff --git a/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt b/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt index fa611686c9..fb05594d46 100644 --- a/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt +++ b/ui-watched/src/main/java/app/tivi/home/watched/WatchedFragment.kt @@ -33,9 +33,11 @@ import androidx.navigation.fragment.findNavController import androidx.paging.compose.collectAsLazyPagingItems import app.tivi.common.compose.AmbientHomeTextCreator import app.tivi.common.compose.AmbientTiviDateFormatter +import app.tivi.common.compose.shouldUseDarkColors import app.tivi.common.compose.theme.TiviTheme import app.tivi.extensions.DefaultNavOptions import app.tivi.home.HomeTextCreator +import app.tivi.settings.TiviPreferences import app.tivi.util.TiviDateFormatter import dagger.hilt.android.AndroidEntryPoint import dev.chrisbanes.accompanist.insets.AmbientWindowInsets @@ -49,6 +51,7 @@ import javax.inject.Inject class WatchedFragment : Fragment() { @Inject internal lateinit var tiviDateFormatter: TiviDateFormatter @Inject internal lateinit var homeTextCreator: HomeTextCreator + @Inject lateinit var preferences: TiviPreferences private val viewModel: WatchedViewModel by viewModels() @@ -58,7 +61,7 @@ class WatchedFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? = ComposeView(requireContext()).apply { + ): View = ComposeView(requireContext()).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) // We use ViewWindowInsetObserver rather than ProvideWindowInsets @@ -71,7 +74,7 @@ class WatchedFragment : Fragment() { AmbientHomeTextCreator provides homeTextCreator, AmbientWindowInsets provides windowInsets, ) { - TiviTheme { + TiviTheme(useDarkColors = preferences.shouldUseDarkColors()) { val viewState by viewModel.liveData.observeAsState() if (viewState != null) { Watched(