Add option to override user profile settings for audio & subtitle languages (#1680)
## Description Adds settings under the "User profile settings" section which allows for specifying preferred languages for audio and subtitles and the preferred subtitle mode. By default (matching existing Wholphin behavior), the preferred languages and subtitle mode are derived from the user's profile settings provided by the server which can be set on the WebUI: User->Settings->Playback or Subtitles. However, this isn't well understood and Wholphin doesn't display these values anywhere, so many users were confused. The preferred languages and subtitle mode can now be configured from within Wholphin. Setting these will **not** update the server. The settings are **only** used locally. ### Related issues Related to #319 Closes #790 ### Testing Emulator manually changing some settings, added additional unit tests to ensure the overrides are respected when choosing tracks ## Screenshots ### Settings page <img width="1280" height="720" alt="settings_01 Large" src="https://github.com/user-attachments/assets/28cc2f6b-3a60-42a4-b268-48695086d566" /> ### Clicking into "More user profile settings" <img width="1280" height="720" alt="settings_02 Large" src="https://github.com/user-attachments/assets/6c3be3aa-c177-4d44-8060-b76d15fb10d7" /> ### Language choice dialog Can filter languages by typing in the search box at the top <img width="1280" height="720" alt="settings_03 Large" src="https://github.com/user-attachments/assets/c014d0ba-8d5b-4201-a6ee-4876b478148c" /> ## AI or LLM usage None
This commit is contained in:
parent
077b7e4570
commit
3f60fa7550
26 changed files with 1751 additions and 48 deletions
|
|
@ -27,7 +27,6 @@ import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
|
|||
import androidx.navigation3.ui.NavDisplay
|
||||
import androidx.tv.material3.MaterialTheme
|
||||
import androidx.tv.material3.Surface
|
||||
import com.github.damontecres.wholphin.preferences.AppPreferences
|
||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||
import com.github.damontecres.wholphin.services.BackdropService
|
||||
import com.github.damontecres.wholphin.services.NavigationManager
|
||||
|
|
@ -44,12 +43,12 @@ import com.github.damontecres.wholphin.ui.util.LocalInterfaceCustomization
|
|||
fun MainContent(
|
||||
backStack: MutableList<SetupDestination>,
|
||||
navigationManager: NavigationManager,
|
||||
appPreferences: AppPreferences,
|
||||
userPreferences: UserPreferences,
|
||||
backdropService: BackdropService,
|
||||
screensaverService: ScreensaverService,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val preferences by rememberUpdatedState(UserPreferences(appPreferences))
|
||||
val preferences by rememberUpdatedState(userPreferences)
|
||||
Surface(
|
||||
modifier =
|
||||
modifier
|
||||
|
|
@ -59,7 +58,7 @@ fun MainContent(
|
|||
// val backStack = rememberNavBackStack(SetupDestination.Loading)
|
||||
// setupNavigationManager.backStack = backStack
|
||||
val interfaceCustomization =
|
||||
remember(appPreferences) { InterfaceCustomization(appPreferences) }
|
||||
remember(userPreferences.appPreferences) { InterfaceCustomization(userPreferences.appPreferences) }
|
||||
CompositionLocalProvider(LocalInterfaceCustomization provides interfaceCustomization) {
|
||||
NavDisplay(
|
||||
backStack = backStack,
|
||||
|
|
@ -105,7 +104,7 @@ fun MainContent(
|
|||
mutableStateOf(true)
|
||||
}
|
||||
LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
|
||||
if (!appPreferences.signInAutomatically) {
|
||||
if (!userPreferences.appPreferences.signInAutomatically) {
|
||||
showContent = false
|
||||
}
|
||||
}
|
||||
|
|
@ -140,7 +139,7 @@ fun MainContent(
|
|||
screenSaverState.show,
|
||||
Modifier.fillMaxSize(),
|
||||
) {
|
||||
AppScreensaver(appPreferences, Modifier.fillMaxSize())
|
||||
AppScreensaver(userPreferences.appPreferences, Modifier.fillMaxSize())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue