From d31bca120829f853eff987a8538474348da073fb Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sun, 2 Feb 2025 17:58:18 +0100 Subject: [PATCH] make settings work more like they should --- .../keyboard/settings/SettingsActivity.kt | 3 ++ .../keyboard/settings/SettingsNavHost.kt | 2 +- .../settings/screens/AdvancedScreen.kt | 12 +++++- .../keyboard/settings/screens/DebugScreen.kt | 42 +++++++++++++++---- .../settings/screens/GestureTypingScreen.kt | 11 ++++- .../settings/screens/MainSettingsScreen.kt | 8 +++- .../settings/screens/TextCorrectionScreen.kt | 11 ++++- app/src/main/res/values/strings.xml | 2 + 8 files changed, 77 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt b/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt index f8b63a5d3..9483ba24c 100644 --- a/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt +++ b/app/src/main/java/helium314/keyboard/settings/SettingsActivity.kt @@ -15,6 +15,9 @@ import kotlinx.coroutines.flow.MutableStateFlow // todo (roughly in order) // make all prefs actually work +// appearance +// advanced +// preferences // try moving the recomposition of pref change somewhere else, so it's not duplicated everywhere // make the pref lists more compact (compare with old settings) // try making text size similar to old state (also in dialogs) diff --git a/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt b/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt index ec3d3b2d9..91e6ae5a5 100644 --- a/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt +++ b/app/src/main/java/helium314/keyboard/settings/SettingsNavHost.kt @@ -148,6 +148,6 @@ object SettingsDestination { navTarget.value = Settings navScope.launch { delay(10); navTarget.value = target } } else - navTarget.value = About + navTarget.value = target } } diff --git a/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt index e81a0f1d0..6411c4628 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/AdvancedScreen.kt @@ -2,13 +2,17 @@ package helium314.keyboard.settings.screens import android.content.Context import android.os.Build +import androidx.compose.material3.Icon import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import helium314.keyboard.latin.BuildConfig @@ -206,7 +210,13 @@ fun createAdvancedPrefs(context: Context) = listOf( Preference( name = it.title, onClick = { SettingsDestination.navigateTo(SettingsDestination.Debug) } - ) + ) { + Icon( + painter = painterResource(R.drawable.ic_arrow_left), + modifier = Modifier.scale(-1f, 1f), + contentDescription = null + ) + } }, PrefDef(context, Settings.PREF_EMOJI_MAX_SDK, R.string.prefs_key_emoji_max_sdk) { SliderPreference( diff --git a/app/src/main/java/helium314/keyboard/settings/screens/DebugScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/DebugScreen.kt index 04ac2d54f..7bbb47f68 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/DebugScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/DebugScreen.kt @@ -3,7 +3,12 @@ package helium314.keyboard.settings.screens import android.content.Context import android.content.Intent import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -22,6 +27,7 @@ import helium314.keyboard.settings.SearchPrefScreen import helium314.keyboard.settings.SettingsActivity2 import helium314.keyboard.settings.SwitchPreference import helium314.keyboard.settings.Theme +import helium314.keyboard.settings.dialogs.ConfirmationDialog import helium314.keyboard.settings.keyboardNeedsReload @Composable @@ -30,9 +36,10 @@ fun DebugScreen( ) { SearchPrefScreen( onClickBack = onClickBack, - title = stringResource(R.string.settings_screen_toolbar), + title = stringResource(R.string.debug_settings_title), ) { - SettingsActivity2.allPrefs.map[DebugSettings.PREF_SHOW_DEBUG_SETTINGS]!!.Preference() + if (!BuildConfig.DEBUG) + SettingsActivity2.allPrefs.map[DebugSettings.PREF_SHOW_DEBUG_SETTINGS]!!.Preference() SettingsActivity2.allPrefs.map[DebugSettings.PREF_DEBUG_MODE]!!.Preference() SettingsActivity2.allPrefs.map[DebugSettings.PREF_SHOW_SUGGESTION_INFOS]!!.Preference() SettingsActivity2.allPrefs.map[DebugSettings.PREF_FORCE_NON_DISTINCT_MULTITOUCH]!!.Preference() @@ -52,21 +59,41 @@ fun createDebugPrefs(context: Context) = listOf( name = def.title, pref = def.key, default = false, - description = stringResource(R.string.version_text, BuildConfig.VERSION_NAME) ) { if (!it) prefs.edit().putBoolean(DebugSettings.PREF_DEBUG_MODE, false).apply() } }, PrefDef(context, DebugSettings.PREF_DEBUG_MODE, R.string.prefs_debug_mode) { def -> val prefs = LocalContext.current.prefs() - SwitchPreference(def, false) { - needsRestart = true + var showConfirmDialog by remember { mutableStateOf(false) } + SwitchPreference( + name = def.title, + pref = def.key, + description = stringResource(R.string.version_text, BuildConfig.VERSION_NAME), + default = false, + ) { if (!it) prefs.edit().putBoolean(DebugSettings.PREF_SHOW_SUGGESTION_INFOS, false).apply() + showConfirmDialog = true + } + if (showConfirmDialog) { + ConfirmationDialog( + onDismissRequest = { showConfirmDialog = false }, + onConfirmed = { Runtime.getRuntime().exit(0) }, + text = { Text(stringResource(R.string.message_restart_required)) } + ) } }, PrefDef(context, DebugSettings.PREF_SHOW_SUGGESTION_INFOS, R.string.prefs_show_suggestion_infos) { def -> SwitchPreference(def, false) { keyboardNeedsReload = true } }, PrefDef(context, DebugSettings.PREF_FORCE_NON_DISTINCT_MULTITOUCH, R.string.prefs_force_non_distinct_multitouch) { def -> - SwitchPreference(def, false) { needsRestart = true } + var showConfirmDialog by remember { mutableStateOf(false) } + SwitchPreference(def, false) { showConfirmDialog = true } + if (showConfirmDialog) { + ConfirmationDialog( + onDismissRequest = { showConfirmDialog = false }, + onConfirmed = { Runtime.getRuntime().exit(0) }, + text = { Text(stringResource(R.string.message_restart_required)) } + ) + } }, PrefDef(context, DebugSettings.PREF_SLIDING_KEY_INPUT_PREVIEW, R.string.sliding_key_input_preview, R.string.sliding_key_input_preview_summary) { def -> SwitchPreference(def, false) @@ -95,6 +122,3 @@ private fun Preview() { } } } - -// todo: actually use it -var needsRestart = false diff --git a/app/src/main/java/helium314/keyboard/settings/screens/GestureTypingScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/GestureTypingScreen.kt index 94f1fbf72..b02a6fe16 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/GestureTypingScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/GestureTypingScreen.kt @@ -71,10 +71,19 @@ fun createGestureTypingPrefs(context: Context) = listOf( ) }, PrefDef(context, Settings.PREF_GESTURE_FLOATING_PREVIEW_DYNAMIC, R.string.gesture_floating_preview_text, R.string.gesture_floating_preview_dynamic_summary) { + val ctx = LocalContext.current SwitchPreference( def = it, default = true - ) { keyboardNeedsReload = true } + ) { + // is this complexity and 2 pref keys for one setting really needed? + // default value is based on system reduced motion + val default = Settings.readGestureDynamicPreviewDefault(ctx) + val followingSystem = it == default + // allow the default to be overridden + ctx.prefs().edit().putBoolean(Settings.PREF_GESTURE_DYNAMIC_PREVIEW_FOLLOW_SYSTEM, followingSystem).apply() + keyboardNeedsReload = true + } }, PrefDef(context, Settings.PREF_GESTURE_SPACE_AWARE, R.string.gesture_space_aware, R.string.gesture_space_aware_summary) { SwitchPreference( diff --git a/app/src/main/java/helium314/keyboard/settings/screens/MainSettingsScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/MainSettingsScreen.kt index 67dc84dcc..d79077e68 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/MainSettingsScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/MainSettingsScreen.kt @@ -81,7 +81,13 @@ fun MainSettingsScreen( name = stringResource(R.string.settings_screen_gesture), onClick = onClickGestureTyping, icon = R.drawable.ic_settings_gesture_foreground - ) + ) { + Icon( + painter = painterResource(R.drawable.ic_arrow_left), + modifier = Modifier.scale(-1f, 1f), + contentDescription = null + ) + } Preference( name = stringResource(R.string.settings_screen_correction), onClick = onClickTextCorrection, diff --git a/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt index 545a580dd..c49d78807 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt @@ -7,6 +7,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Icon import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -16,7 +17,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import helium314.keyboard.latin.R @@ -97,7 +100,13 @@ fun createCorrectionPrefs(context: Context) = listOf( Preference( name = stringResource(R.string.edit_personal_dictionary), onClick = { ctx.getActivity()?.switchTo(UserDictionaryListFragment()) }, - ) + ) { + Icon( + painter = painterResource(R.drawable.ic_arrow_left), + modifier = Modifier.scale(-1f, 1f), + contentDescription = null + ) + } }, PrefDef(context, Settings.PREF_BLOCK_POTENTIALLY_OFFENSIVE, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 322cadd77..687086bca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -968,4 +968,6 @@ New dictionary: Customize icons Really reset all customized icons? + + A restart is required to apply the changes. Quit now?