From dfb935431b8929a61343d8a0f8db15853a3ffb48 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 6 Nov 2024 13:10:22 +0100 Subject: [PATCH] refactor: unify selected value logic in ListPreferenceDialog --- .../com/bnyro/translate/obj/ListPreferenceOption.kt | 1 - .../bnyro/translate/ui/components/ThemeModeDialog.kt | 7 ++----- .../translate/ui/components/prefs/ListPreference.kt | 3 ++- .../ui/components/prefs/ListPreferenceDialog.kt | 10 +++------- .../java/com/bnyro/translate/ui/views/EnginePref.kt | 5 +++-- .../translate/ui/views/SimTranslationComponent.kt | 7 ++++--- 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/bnyro/translate/obj/ListPreferenceOption.kt b/app/src/main/java/com/bnyro/translate/obj/ListPreferenceOption.kt index c316f40c7..5e21d7084 100644 --- a/app/src/main/java/com/bnyro/translate/obj/ListPreferenceOption.kt +++ b/app/src/main/java/com/bnyro/translate/obj/ListPreferenceOption.kt @@ -20,5 +20,4 @@ package com.bnyro.translate.obj data class ListPreferenceOption( val name: String, val value: Int, - val isSelected: Boolean = false ) diff --git a/app/src/main/java/com/bnyro/translate/ui/components/ThemeModeDialog.kt b/app/src/main/java/com/bnyro/translate/ui/components/ThemeModeDialog.kt index cd340ac2d..6a6e25fd7 100644 --- a/app/src/main/java/com/bnyro/translate/ui/components/ThemeModeDialog.kt +++ b/app/src/main/java/com/bnyro/translate/ui/components/ThemeModeDialog.kt @@ -33,7 +33,6 @@ fun ThemeModeDialog( ) { val activity = LocalContext.current as MainActivity ListPreferenceDialog( - title = stringResource(R.string.select_theme), preferenceKey = Preferences.themeModeKey, onDismissRequest = { onDismiss.invoke() @@ -42,24 +41,22 @@ fun ThemeModeDialog( ListPreferenceOption( name = stringResource(R.string.theme_auto), value = ThemeMode.AUTO.value, - isSelected = activity.themeMode == ThemeMode.AUTO ), ListPreferenceOption( name = stringResource(R.string.theme_light), value = ThemeMode.LIGHT.value, - isSelected = activity.themeMode == ThemeMode.LIGHT ), ListPreferenceOption( name = stringResource(R.string.theme_dark), value = ThemeMode.DARK.value, - isSelected = activity.themeMode == ThemeMode.DARK ), ListPreferenceOption( name = stringResource(R.string.theme_black), value = ThemeMode.BLACK.value, - isSelected = activity.themeMode == ThemeMode.BLACK ) ), + title = stringResource(R.string.select_theme), + currentValue = activity.themeMode.value, onOptionSelected = { activity.themeMode = ThemeMode.values()[it.value] } diff --git a/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreference.kt b/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreference.kt index cdcc962a9..55c4da9f6 100644 --- a/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreference.kt +++ b/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreference.kt @@ -20,6 +20,7 @@ package com.bnyro.translate.ui.components.prefs import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -42,7 +43,7 @@ fun ListPreference( } var selectedIndex by remember { - mutableStateOf(values.indexOf(Preferences.get(preferenceKey, defaultValue))) + mutableIntStateOf(values.indexOf(Preferences.get(preferenceKey, defaultValue))) } PreferenceItem( diff --git a/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreferenceDialog.kt b/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreferenceDialog.kt index 41a65b884..078dbe2a7 100644 --- a/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreferenceDialog.kt +++ b/app/src/main/java/com/bnyro/translate/ui/components/prefs/ListPreferenceDialog.kt @@ -48,7 +48,7 @@ fun ListPreferenceDialog( LazyColumn { items(options) { SelectableItem( - text = if (it.value == currentValue) "${it.name} ✓" else it.name, + text = it.name, onClick = { if (preferenceKey != null) { Preferences.put( @@ -59,7 +59,7 @@ fun ListPreferenceDialog( onOptionSelected.invoke(it) onDismissRequest.invoke() }, - isSelected = it.isSelected + isSelected = it.value == currentValue ) } } @@ -70,11 +70,7 @@ fun ListPreferenceDialog( onDismissRequest.invoke() } ) { - Text( - stringResource( - R.string.cancel - ) - ) + Text(stringResource(R.string.cancel)) } } ) diff --git a/app/src/main/java/com/bnyro/translate/ui/views/EnginePref.kt b/app/src/main/java/com/bnyro/translate/ui/views/EnginePref.kt index 071d1d757..003cd90ef 100644 --- a/app/src/main/java/com/bnyro/translate/ui/views/EnginePref.kt +++ b/app/src/main/java/com/bnyro/translate/ui/views/EnginePref.kt @@ -139,9 +139,10 @@ fun EnginePref() { ListPreferenceOption( it.replace("_", " ").capitalize(), value = index, - isSelected = selectedAvailableEngine == it ) - } + }, + currentValue = engine.supportedEngines.indexOf(selectedAvailableEngine) + .takeIf { it >= 0 } ) { engineOption -> val selectedEngine = engine.supportedEngines[engineOption.value] Preferences.put(engine.selEnginePrefKey, selectedEngine) diff --git a/app/src/main/java/com/bnyro/translate/ui/views/SimTranslationComponent.kt b/app/src/main/java/com/bnyro/translate/ui/views/SimTranslationComponent.kt index 8a7ef871c..7a1620859 100644 --- a/app/src/main/java/com/bnyro/translate/ui/views/SimTranslationComponent.kt +++ b/app/src/main/java/com/bnyro/translate/ui/views/SimTranslationComponent.kt @@ -91,11 +91,12 @@ fun SimTranslationDialogComponent( if (showSelectionDialog) { ListPreferenceDialog( preferenceKey = null, - title = stringResource(R.string.selected_engine), onDismissRequest = { showSelectionDialog = false }, + title = stringResource(R.string.selected_engine), options = viewModel.enabledSimEngines.mapIndexed { index, engine -> - ListPreferenceOption(engine.name, index, selected == engine) - } + ListPreferenceOption(engine.name, index) + }, + currentValue = viewModel.enabledSimEngines.indexOf(viewModel.engine).takeIf { it >= 0 } ) { engineOption -> selected = viewModel.enabledSimEngines[engineOption.value] viewModel.engine = selected