From c844395acdb5a93573264e1cfb6d55dbb98927c3 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Thu, 5 Feb 2026 14:33:54 -0500 Subject: [PATCH] Move home page specific settings --- .../wholphin/data/model/HomeRowConfig.kt | 16 ++++++---- .../wholphin/preferences/AppPreference.kt | 4 +-- .../services/tvprovider/TvProviderWorker.kt | 8 +---- .../ui/main/settings/HomeSettingsGlobal.kt | 32 ++++++++++++++++++- .../ui/main/settings/HomeSettingsPage.kt | 22 +++++++++++++ .../ui/main/settings/HomeSettingsViewModel.kt | 3 ++ app/src/main/res/values/strings.xml | 4 +-- 7 files changed, 70 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt index b195c28d..53e58397 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt @@ -85,11 +85,7 @@ sealed interface HomeRowConfig { @SerialName("Genres") data class Genres( val parentId: UUID, - override val viewOptions: HomeRowViewOptions = - HomeRowViewOptions( - heightDp = Cards.HEIGHT_EPISODE, - aspectRatio = AspectRatio.WIDE, - ), + override val viewOptions: HomeRowViewOptions = HomeRowViewOptions.genreDefault, ) : HomeRowConfig { override fun updateViewOptions(viewOptions: HomeRowViewOptions): Genres = this.copy(viewOptions = viewOptions) } @@ -214,4 +210,12 @@ data class HomeRowViewOptions( val episodeContentScale: PrefContentScale = PrefContentScale.FIT, val episodeAspectRatio: AspectRatio = AspectRatio.TALL, val episodeImageType: ViewOptionImageType = ViewOptionImageType.PRIMARY, -) +) { + companion object { + val genreDefault = + HomeRowViewOptions( + heightDp = Cards.HEIGHT_EPISODE, + aspectRatio = AspectRatio.WIDE, + ) + } +} diff --git a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt index 2b6b7064..183fb261 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt @@ -959,9 +959,6 @@ val basicPreferences = preferences = listOf( AppPreference.SignInAuto, - AppPreference.HomePageItems, - AppPreference.CombineContinueNext, - AppPreference.RewatchNextUp, AppPreference.PlayThemeMusic, AppPreference.RememberSelectedTab, AppPreference.SubtitleStyle, @@ -1058,6 +1055,7 @@ val advancedPreferences = preferences = listOf( AppPreference.ShowClock, + AppPreference.CombineContinueNext, // Temporarily disabled, see https://github.com/damontecres/Wholphin/pull/127#issuecomment-3478058418 // AppPreference.NavDrawerSwitchOnFocus, AppPreference.ControllerTimeout, diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/tvprovider/TvProviderWorker.kt b/app/src/main/java/com/github/damontecres/wholphin/services/tvprovider/TvProviderWorker.kt index 134e4903..1a4dd99e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/tvprovider/TvProviderWorker.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/tvprovider/TvProviderWorker.kt @@ -80,7 +80,6 @@ class TvProviderWorker getPotentialItems( userId, prefs.homePagePreferences.enableRewatchingNextUp, - prefs.homePagePreferences.combineContinueNext, ) val potentialItemsToAddIds = potentialItemsToAdd.map { it.id.toString() } @@ -144,7 +143,6 @@ class TvProviderWorker private suspend fun getPotentialItems( userId: UUID, enableRewatching: Boolean, - combineContinueNext: Boolean, ): List { val resumeItems = latestNextUpService.getResume(userId, 10, true) val seriesIds = resumeItems.mapNotNull { it.data.seriesId } @@ -152,11 +150,7 @@ class TvProviderWorker latestNextUpService .getNextUp(userId, 10, enableRewatching, false) .filter { it.data.seriesId != null && it.data.seriesId !in seriesIds } - return if (combineContinueNext) { - latestNextUpService.buildCombined(resumeItems, nextUpItems) - } else { - resumeItems + nextUpItems - } + return latestNextUpService.buildCombined(resumeItems, nextUpItems) } private suspend fun getCurrentTvChannelNextUp(): List = diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsGlobal.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsGlobal.kt index ff61c616..1ad803ff 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsGlobal.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsGlobal.kt @@ -23,11 +23,16 @@ import androidx.tv.material3.Icon import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R +import com.github.damontecres.wholphin.preferences.AppPreference +import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.ui.FontAwesome +import com.github.damontecres.wholphin.ui.preferences.ComposablePreference import com.github.damontecres.wholphin.ui.tryRequestFocus @Composable fun HomeSettingsGlobal( + preferences: AppPreferences, + onPreferenceChange: (AppPreferences) -> Unit, onClickResize: (Int) -> Unit, onClickSave: () -> Unit, onClickLoad: () -> Unit, @@ -52,6 +57,31 @@ fun HomeSettingsGlobal( .fillMaxHeight() .focusRestorer(firstFocus), ) { + item { + ComposablePreference( + preference = AppPreference.HomePageItems, + value = AppPreference.HomePageItems.getter.invoke(preferences), + onValueChange = { + val newPrefs = AppPreference.HomePageItems.setter.invoke(preferences, it) + onPreferenceChange.invoke(newPrefs) + }, + onNavigate = {}, + modifier = Modifier.focusRequester(firstFocus), + ) + } + item { + ComposablePreference( + preference = AppPreference.RewatchNextUp, + value = AppPreference.RewatchNextUp.getter.invoke(preferences), + onValueChange = { + val newPrefs = AppPreference.RewatchNextUp.setter.invoke(preferences, it) + onPreferenceChange.invoke(newPrefs) + }, + onNavigate = {}, + modifier = Modifier, + ) + } + item { HorizontalDivider() } item { HomeSettingsListItem( selected = false, @@ -63,7 +93,7 @@ fun HomeSettingsGlobal( ) }, onClick = { onClickResize.invoke(1) }, - modifier = Modifier.focusRequester(firstFocus), + modifier = Modifier, ) } item { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsPage.kt index e66de860..9c061ba9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsPage.kt @@ -30,7 +30,10 @@ import androidx.tv.material3.MaterialTheme import androidx.tv.material3.surfaceColorAtElevation import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.model.HomeRowConfig +import com.github.damontecres.wholphin.data.model.HomeRowViewOptions +import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.ui.components.ConfirmDialog +import com.github.damontecres.wholphin.ui.launchIO import com.github.damontecres.wholphin.ui.main.HomePageContent import com.github.damontecres.wholphin.ui.main.settings.HomeSettingsDestination.ChooseRowType import com.github.damontecres.wholphin.ui.main.settings.HomeSettingsDestination.RowSettings @@ -163,10 +166,18 @@ fun HomeSettingsPage( else -> Options.OPTIONS } } + val defaultViewOptions = + remember(row.config) { + when (row.config) { + is HomeRowConfig.Genres -> HomeRowViewOptions.genreDefault + else -> HomeRowViewOptions() + } + } HomeRowSettings( title = row.title, preferenceOptions = preferenceOptions, viewOptions = row.config.viewOptions, + defaultViewOptions = defaultViewOptions, onViewOptionsChange = { viewModel.updateViewOptions(dest.rowId, it) }, @@ -190,7 +201,18 @@ fun HomeSettingsPage( } HomeSettingsDestination.GlobalSettings -> { + val preferences by + viewModel.preferencesDataStore.data.collectAsState( + AppPreferences.getDefaultInstance(), + ) + HomeSettingsGlobal( + preferences = preferences, + onPreferenceChange = { newPrefs -> + scope.launchIO { + viewModel.preferencesDataStore.updateData { newPrefs } + } + }, onClickResize = { viewModel.resizeCards(it) }, onClickSave = { showConfirmDialog = diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsViewModel.kt index 34f62851..6e7f47b4 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomeSettingsViewModel.kt @@ -3,6 +3,7 @@ package com.github.damontecres.wholphin.ui.main.settings import android.content.Context import android.widget.Toast import androidx.compose.runtime.Immutable +import androidx.datastore.core.DataStore import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.damontecres.wholphin.R @@ -19,6 +20,7 @@ import com.github.damontecres.wholphin.data.model.HomeRowConfig.RecentlyAdded import com.github.damontecres.wholphin.data.model.HomeRowConfig.RecentlyReleased import com.github.damontecres.wholphin.data.model.HomeRowConfig.Suggestions import com.github.damontecres.wholphin.data.model.HomeRowViewOptions +import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.HomePageResolvedSettings import com.github.damontecres.wholphin.services.HomeRowConfigDisplay @@ -64,6 +66,7 @@ class HomeSettingsViewModel private val navDrawerItemRepository: NavDrawerItemRepository, private val backdropService: BackdropService, private val seerrServerRepository: SeerrServerRepository, + val preferencesDataStore: DataStore, @param:IoCoroutineScope private val ioScope: CoroutineScope, ) : ViewModel() { private val _state = MutableStateFlow(HomePageSettingsState.EMPTY) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d93619b6..6d1a7436 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -501,8 +501,8 @@ Overwrite local settings? For episodes Suggestions for %1$s - Increase all cards size - Decrease all cards size + Increase size for all cards + Decrease size for all cards Use thumb images