2025-01-29 23:18:06 +01:00
|
|
|
package helium314.keyboard.settings.screens
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.os.Build
|
|
|
|
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.platform.LocalContext
|
|
|
|
import androidx.compose.ui.res.stringResource
|
|
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
|
|
import helium314.keyboard.latin.BuildConfig
|
|
|
|
import helium314.keyboard.latin.R
|
|
|
|
import helium314.keyboard.latin.SystemBroadcastReceiver
|
|
|
|
import helium314.keyboard.latin.settings.DebugSettings
|
|
|
|
import helium314.keyboard.latin.settings.Settings
|
|
|
|
import helium314.keyboard.settings.AllPrefs
|
|
|
|
import helium314.keyboard.settings.ListPreference
|
|
|
|
import helium314.keyboard.settings.NonSettingsPrefs
|
|
|
|
import helium314.keyboard.settings.PrefDef
|
|
|
|
import helium314.keyboard.settings.Preference
|
|
|
|
import helium314.keyboard.settings.PreferenceCategory
|
|
|
|
import helium314.keyboard.settings.SearchPrefScreen
|
|
|
|
import helium314.keyboard.settings.SettingsActivity2
|
|
|
|
import helium314.keyboard.settings.SettingsDestination
|
|
|
|
import helium314.keyboard.settings.SliderPreference
|
|
|
|
import helium314.keyboard.settings.SwitchPreference
|
|
|
|
import helium314.keyboard.settings.Theme
|
|
|
|
import helium314.keyboard.settings.prefs
|
|
|
|
import helium314.keyboard.settings.themeChanged
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
fun AdvancedSettingsScreen(
|
|
|
|
onClickBack: () -> Unit,
|
|
|
|
) {
|
|
|
|
val prefs = LocalContext.current.prefs()
|
|
|
|
SearchPrefScreen(
|
|
|
|
onClickBack = onClickBack,
|
|
|
|
title = stringResource(R.string.settings_screen_advanced),
|
|
|
|
) {
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ALWAYS_INCOGNITO_MODE]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_KEY_LONGPRESS_TIMEOUT]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_SPACE_HORIZONTAL_SWIPE]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_SPACE_VERTICAL_SWIPE]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_DELETE_SWIPE]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_SPACE_TO_CHANGE_LANG]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY]!!.Preference()
|
|
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_SHOW_SETUP_WIZARD_ICON]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ABC_AFTER_SYMBOL_SPACE]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ABC_AFTER_EMOJI]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ABC_AFTER_CLIP]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_CUSTOM_CURRENCY_KEY]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_MORE_POPUP_KEYS]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_ABC_AFTER_EMOJI]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.CUSTOM_SYMBOLS_NUMBER_LAYOUTS]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.CUSTOM_FUNCTIONAL_LAYOUTS]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.BACKUP_RESTORE]!!.Preference()
|
|
|
|
if (BuildConfig.DEBUG || prefs.getBoolean(DebugSettings.PREF_SHOW_DEBUG_SETTINGS, false))
|
2025-01-29 23:34:21 +01:00
|
|
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.DEBUG_SETTINGS]!!.Preference() // todo: maybe move to main screen?
|
2025-01-29 23:18:06 +01:00
|
|
|
PreferenceCategory(
|
|
|
|
stringResource(R.string.settings_category_experimental)
|
|
|
|
) {
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_EMOJI_MAX_SDK]!!.Preference()
|
|
|
|
SettingsActivity2.allPrefs.map[Settings.PREF_URL_DETECTION]!!.Preference()
|
|
|
|
if (BuildConfig.BUILD_TYPE != "nouserlib")
|
|
|
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.LOAD_GESTURE_LIB]!!.Preference()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun createAdvancedPrefs(context: Context) = listOf(
|
|
|
|
PrefDef(context, Settings.PREF_ALWAYS_INCOGNITO_MODE, R.string.incognito, R.string.prefs_force_incognito_mode_summary) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = false
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_KEY_LONGPRESS_TIMEOUT, R.string.prefs_key_longpress_timeout_settings) {
|
|
|
|
SliderPreference(
|
|
|
|
name = it.title,
|
|
|
|
pref = it.key,
|
|
|
|
default = 300,
|
|
|
|
range = 100f..700f,
|
|
|
|
description = { stringResource(R.string.abbreviation_unit_milliseconds, it.toString()) }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_SPACE_HORIZONTAL_SWIPE, R.string.show_horizontal_space_swipe) { def ->
|
|
|
|
// todo: get rid of the arrays from old settings
|
|
|
|
val items = listOf(
|
|
|
|
stringResource(R.string.space_swipe_move_cursor_entry) to "move_cursor",
|
|
|
|
stringResource(R.string.switch_language) to "switch_language",
|
|
|
|
stringResource(R.string.space_swipe_toggle_numpad_entry) to "toggle_numpad",
|
|
|
|
stringResource(R.string.action_none) to "none",
|
|
|
|
)
|
|
|
|
ListPreference(def, items, "move_cursor")
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_SPACE_VERTICAL_SWIPE, R.string.show_vertical_space_swipe) { def ->
|
|
|
|
// todo: get rid of the arrays from old settings
|
|
|
|
val items = listOf(
|
|
|
|
stringResource(R.string.space_swipe_move_cursor_entry) to "move_cursor",
|
|
|
|
stringResource(R.string.switch_language) to "switch_language",
|
|
|
|
stringResource(R.string.space_swipe_toggle_numpad_entry) to "toggle_numpad",
|
|
|
|
stringResource(R.string.action_none) to "none",
|
|
|
|
)
|
|
|
|
ListPreference(def, items, "none")
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_DELETE_SWIPE, R.string.delete_swipe, R.string.delete_swipe_summary) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = true
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_SPACE_TO_CHANGE_LANG, R.string.prefs_long_press_keyboard_to_change_lang, R.string.prefs_long_press_keyboard_to_change_lang_summary) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = true
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD, R.string.prefs_long_press_symbol_for_numpad) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = false
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY, R.string.prefs_enable_emoji_alt_physical_key, R.string.prefs_enable_emoji_alt_physical_key_summary) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = true
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_SHOW_SETUP_WIZARD_ICON, R.string.prefs_enable_emoji_alt_physical_key_summary) {
|
|
|
|
val ctx = LocalContext.current
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = true
|
|
|
|
) { SystemBroadcastReceiver.toggleAppIcon(ctx) }
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_ABC_AFTER_SYMBOL_SPACE, R.string.switch_keyboard_after, R.string.after_symbol_and_space) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = true
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_ABC_AFTER_EMOJI, R.string.switch_keyboard_after, R.string.after_emoji) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = false
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_ABC_AFTER_CLIP, R.string.switch_keyboard_after, R.string.after_clip) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = false
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_CUSTOM_CURRENCY_KEY, R.string.customize_currencies) {
|
|
|
|
var showDialog by remember { mutableStateOf(false) }
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { showDialog = true }
|
|
|
|
)
|
|
|
|
// if (showDialog) todo: show the currency customizer
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_MORE_POPUP_KEYS, R.string.show_popup_keys_title) { def ->
|
|
|
|
// todo: get rid of the arrays from old settings
|
|
|
|
val items = listOf(
|
|
|
|
stringResource(R.string.show_popup_keys_normal) to "normal",
|
|
|
|
stringResource(R.string.show_popup_keys_main) to "main",
|
|
|
|
stringResource(R.string.show_popup_keys_more) to "more",
|
|
|
|
stringResource(R.string.show_popup_keys_all) to "all",
|
|
|
|
)
|
|
|
|
ListPreference(def, items, "main")
|
|
|
|
// todo: on value changed -> KeyboardLayoutSet.onSystemLocaleChanged()
|
|
|
|
},
|
|
|
|
PrefDef(context, NonSettingsPrefs.CUSTOM_SYMBOLS_NUMBER_LAYOUTS, R.string.customize_symbols_number_layouts) {
|
|
|
|
var showDialog by remember { mutableStateOf(false) }
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { showDialog = true }
|
|
|
|
)
|
|
|
|
// if (showDialog) todo: show the currency customizer
|
|
|
|
},
|
|
|
|
PrefDef(context, NonSettingsPrefs.CUSTOM_FUNCTIONAL_LAYOUTS, R.string.customize_functional_key_layouts) {
|
|
|
|
var showDialog by remember { mutableStateOf(false) }
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { showDialog = true }
|
|
|
|
)
|
|
|
|
// if (showDialog) todo: show the currency customizer
|
|
|
|
},
|
|
|
|
PrefDef(context, NonSettingsPrefs.BACKUP_RESTORE, R.string.backup_restore_title) {
|
|
|
|
var showDialog by remember { mutableStateOf(false) }
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { showDialog = true }
|
|
|
|
)
|
|
|
|
// if (showDialog) todo: show the currency customizer
|
|
|
|
},
|
|
|
|
PrefDef(context, NonSettingsPrefs.DEBUG_SETTINGS, R.string.debug_settings_title) {
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { SettingsDestination.navigateTo(SettingsDestination.Debug) }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_EMOJI_MAX_SDK, R.string.prefs_key_emoji_max_sdk) {
|
|
|
|
SliderPreference(
|
|
|
|
name = it.title,
|
|
|
|
pref = it.key,
|
|
|
|
default = Build.VERSION.SDK_INT,
|
|
|
|
range = 21f..35f,
|
|
|
|
description = {
|
|
|
|
"Android " + when(it) {
|
|
|
|
21 -> "5.0"
|
|
|
|
22 -> "5.1"
|
|
|
|
23 -> "6"
|
|
|
|
24 -> "7.0"
|
|
|
|
25 -> "7.1"
|
|
|
|
26 -> "8.0"
|
|
|
|
27 -> "8.1"
|
|
|
|
28 -> "9"
|
|
|
|
29 -> "10"
|
|
|
|
30 -> "11"
|
|
|
|
31 -> "12"
|
|
|
|
32 -> "12L"
|
|
|
|
33 -> "13"
|
|
|
|
34 -> "14"
|
|
|
|
35 -> "15"
|
|
|
|
else -> "version unknown"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
onValueChanged = { themeChanged = true }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, Settings.PREF_URL_DETECTION, R.string.url_detection_title, R.string.url_detection_summary) {
|
|
|
|
SwitchPreference(
|
|
|
|
def = it,
|
|
|
|
default = false
|
|
|
|
)
|
|
|
|
},
|
|
|
|
PrefDef(context, NonSettingsPrefs.LOAD_GESTURE_LIB, R.string.load_gesture_library, R.string.load_gesture_library_summary) {
|
|
|
|
var showDialog by remember { mutableStateOf(false) }
|
|
|
|
Preference(
|
|
|
|
name = it.title,
|
|
|
|
onClick = { showDialog = true }
|
|
|
|
)
|
|
|
|
// if (showDialog) todo: show the dialog, or launch that thing
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
@Preview
|
|
|
|
@Composable
|
|
|
|
private fun Preview() {
|
|
|
|
SettingsActivity2.allPrefs = AllPrefs(LocalContext.current)
|
|
|
|
Theme(true) {
|
|
|
|
Surface {
|
|
|
|
AdvancedSettingsScreen { }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|