mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 14:02:44 +00:00
finish basics of appearance screen
This commit is contained in:
parent
12d411c294
commit
e016d13410
3 changed files with 94 additions and 14 deletions
|
@ -72,4 +72,9 @@ object NonSettingsPrefs {
|
||||||
const val BACKUP_RESTORE = "backup_restore"
|
const val BACKUP_RESTORE = "backup_restore"
|
||||||
const val DEBUG_SETTINGS = "screen_debug"
|
const val DEBUG_SETTINGS = "screen_debug"
|
||||||
const val LOAD_GESTURE_LIB = "load_gesture_library"
|
const val LOAD_GESTURE_LIB = "load_gesture_library"
|
||||||
|
const val ADJUST_COLORS = "adjust_colors"
|
||||||
|
const val ADJUST_COLORS_NIGHT = "adjust_colors_night"
|
||||||
|
const val BACKGROUND_IMAGE = "background_image"
|
||||||
|
const val BACKGROUND_IMAGE_LANDSCAPE = "background_image_landscape"
|
||||||
|
const val CUSTOM_FONT = "custom_font"
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,20 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
||||||
// todo (roughly in order)
|
// todo (roughly in order)
|
||||||
// make all prefs actually work
|
// make all prefs actually work
|
||||||
|
// 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)
|
// make the pref lists more compact (compare with old settings)
|
||||||
// try making text size similar to old state (also in dialogs)
|
// try making text size similar to old state (also in dialogs)
|
||||||
// check whether dialogs have the same colors, i think currently it's a bit inconsistent
|
// check whether dialogs have the same colors, i think currently it's a bit inconsistent
|
||||||
// rename both settingsActivities
|
// rename both settingsActivities
|
||||||
// work on todos in other files
|
// work on todos in other files
|
||||||
// use better / more structured and clear names and arrangement of files
|
// use better / more structured and clear names and arrangement of files
|
||||||
|
// the prefDef and AllPrefs, also be clear about pref <-> key <-> prefKey (all used, probably should be latter)
|
||||||
// animations when stuff (dis)appears
|
// animations when stuff (dis)appears
|
||||||
// LaunchedEffect, AnimatedVisibility
|
// LaunchedEffect, AnimatedVisibility
|
||||||
// performance
|
// performance
|
||||||
// find a nice way of testing (probably add logs for measuring time and recompositions)
|
// find a nice way of testing (probably add logs for measuring time and recompositions)
|
||||||
// consider that stuff in composables can get called quite often on any changes -> use remember for things that are slow
|
// consider that stuff in composables can get called quite often on any changes
|
||||||
|
// -> use remember for things that are slow, but be careful about things that can change (e.g. values derived from prefs)
|
||||||
// improve performance when loading screens with many settings (lazyColumn?)
|
// improve performance when loading screens with many settings (lazyColumn?)
|
||||||
// first check whether it's really necessary (test advanced or correction screen normal and with lazyColumn)
|
// first check whether it's really necessary (test advanced or correction screen normal and with lazyColumn)
|
||||||
// screens could have a lazy column of preferences and category separators, and the list has an if-setting-then-null for hiding
|
// screens could have a lazy column of preferences and category separators, and the list has an if-setting-then-null for hiding
|
||||||
|
@ -49,6 +52,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
// language settings (should change more than just move to compose)
|
// language settings (should change more than just move to compose)
|
||||||
// user dictionary settings (or maybe leave old state for a while?)
|
// user dictionary settings (or maybe leave old state for a while?)
|
||||||
// color settings (should at least change how colors are stored, and have a color search/filter)
|
// color settings (should at least change how colors are stored, and have a color search/filter)
|
||||||
|
// allow users to add custom themes instead of only having a single one (maybe also switchable in colors settings)
|
||||||
// one single place for default values (to be used in composables and settings)
|
// one single place for default values (to be used in composables and settings)
|
||||||
// make auto_correct_threshold a float directly with the list pref (needs pref upgrade)
|
// make auto_correct_threshold a float directly with the list pref (needs pref upgrade)
|
||||||
// using context.prefs() outside settings
|
// using context.prefs() outside settings
|
||||||
|
|
|
@ -16,18 +16,21 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||||
import helium314.keyboard.keyboard.KeyboardTheme
|
import helium314.keyboard.keyboard.KeyboardTheme
|
||||||
import helium314.keyboard.latin.R
|
import helium314.keyboard.latin.R
|
||||||
import helium314.keyboard.latin.settings.Settings
|
import helium314.keyboard.latin.settings.Settings
|
||||||
|
import helium314.keyboard.latin.settings.SettingsValues
|
||||||
import helium314.keyboard.latin.utils.Log
|
import helium314.keyboard.latin.utils.Log
|
||||||
import helium314.keyboard.latin.utils.getActivity
|
import helium314.keyboard.latin.utils.getActivity
|
||||||
import helium314.keyboard.latin.utils.getStringResourceOrName
|
import helium314.keyboard.latin.utils.getStringResourceOrName
|
||||||
import helium314.keyboard.latin.utils.prefs
|
import helium314.keyboard.latin.utils.prefs
|
||||||
import helium314.keyboard.settings.AllPrefs
|
import helium314.keyboard.settings.AllPrefs
|
||||||
import helium314.keyboard.settings.ListPreference
|
import helium314.keyboard.settings.ListPreference
|
||||||
|
import helium314.keyboard.settings.NonSettingsPrefs
|
||||||
import helium314.keyboard.settings.PrefDef
|
import helium314.keyboard.settings.PrefDef
|
||||||
import helium314.keyboard.settings.Preference
|
import helium314.keyboard.settings.Preference
|
||||||
import helium314.keyboard.settings.PreferenceCategory
|
import helium314.keyboard.settings.PreferenceCategory
|
||||||
import helium314.keyboard.settings.SearchPrefScreen
|
import helium314.keyboard.settings.SearchPrefScreen
|
||||||
import helium314.keyboard.settings.SettingsActivity2
|
import helium314.keyboard.settings.SettingsActivity2
|
||||||
import helium314.keyboard.settings.SettingsDestination
|
import helium314.keyboard.settings.SettingsDestination
|
||||||
|
import helium314.keyboard.settings.SliderPreference
|
||||||
import helium314.keyboard.settings.SwitchPreference
|
import helium314.keyboard.settings.SwitchPreference
|
||||||
import helium314.keyboard.settings.Theme
|
import helium314.keyboard.settings.Theme
|
||||||
|
|
||||||
|
@ -35,22 +38,45 @@ import helium314.keyboard.settings.Theme
|
||||||
fun AppearanceScreen(
|
fun AppearanceScreen(
|
||||||
onClickBack: () -> Unit,
|
onClickBack: () -> Unit,
|
||||||
) {
|
) {
|
||||||
val prefs = LocalContext.current.prefs()
|
val ctx = LocalContext.current
|
||||||
|
val prefs = ctx.prefs()
|
||||||
val b = (LocalContext.current.getActivity() as? SettingsActivity2)?.prefChanged?.collectAsState()
|
val b = (LocalContext.current.getActivity() as? SettingsActivity2)?.prefChanged?.collectAsState()
|
||||||
if (b?.value ?: 0 < 0)
|
if (b?.value ?: 0 < 0)
|
||||||
Log.v("irrelevant", "stupid way to trigger recomposition on preference change")
|
Log.v("irrelevant", "stupid way to trigger recomposition on preference change")
|
||||||
val gestureEnabled = prefs.getBoolean(Settings.PREF_GESTURE_INPUT, true)
|
val dayNightMode = Settings.readDayNightPref(prefs, ctx.resources)
|
||||||
|
val lightTheme = prefs.getString(Settings.PREF_THEME_COLORS, KeyboardTheme.THEME_LIGHT)
|
||||||
|
val darkTheme = prefs.getString(Settings.PREF_THEME_COLORS_NIGHT, KeyboardTheme.THEME_DARK)
|
||||||
SearchPrefScreen(
|
SearchPrefScreen(
|
||||||
onClickBack = onClickBack,
|
onClickBack = onClickBack,
|
||||||
title = stringResource(R.string.settings_screen_appearance),
|
title = stringResource(R.string.settings_screen_appearance),
|
||||||
) {
|
) {
|
||||||
PreferenceCategory(stringResource(R.string.settings_screen_theme)) {
|
PreferenceCategory(stringResource(R.string.settings_screen_theme)) {
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_THEME_STYLE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_ICON_STYLE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_CUSTOM_ICON_NAMES]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_THEME_COLORS]!!.Preference()
|
||||||
|
if (lightTheme == KeyboardTheme.THEME_USER)
|
||||||
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.ADJUST_COLORS]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_THEME_KEY_BORDERS]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_THEME_DAY_NIGHT]!!.Preference()
|
||||||
|
if (dayNightMode)
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_THEME_COLORS_NIGHT]!!.Preference()
|
||||||
|
if (dayNightMode && darkTheme == KeyboardTheme.THEME_USER_NIGHT)
|
||||||
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.ADJUST_COLORS_NIGHT]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_NAVBAR_COLOR]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.BACKGROUND_IMAGE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.BACKGROUND_IMAGE_LANDSCAPE]!!.Preference()
|
||||||
}
|
}
|
||||||
PreferenceCategory(stringResource(R.string.settings_category_miscellaneous)) {
|
PreferenceCategory(stringResource(R.string.settings_category_miscellaneous)) {
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_ENABLE_SPLIT_KEYBOARD]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_SPLIT_SPACER_SCALE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_NARROW_KEY_GAPS]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_NARROW_KEY_GAPS]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_KEYBOARD_HEIGHT_SCALE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_BOTTOM_PADDING_SCALE]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[Settings.PREF_SPACE_BAR_TEXT]!!.Preference()
|
||||||
|
SettingsActivity2.allPrefs.map[NonSettingsPrefs.CUSTOM_FONT]!!.Preference()
|
||||||
}
|
}
|
||||||
SettingsActivity2.allPrefs.map[Settings.PREF_GESTURE_INPUT]!!.Preference()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,15 +138,14 @@ fun createAppearancePrefs(context: Context) = listOf(
|
||||||
KeyboardTheme.THEME_DARK
|
KeyboardTheme.THEME_DARK
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
// todo: non-settings pref
|
PrefDef(context, NonSettingsPrefs.ADJUST_COLORS, R.string.select_user_colors, R.string.select_user_colors_summary) { def ->
|
||||||
PrefDef(context, "theme_select_colors", R.string.select_user_colors, R.string.select_user_colors_summary) { def ->
|
|
||||||
Preference(
|
Preference(
|
||||||
name = def.title,
|
name = def.title,
|
||||||
description = def.description,
|
description = def.description,
|
||||||
onClick = { SettingsDestination.navigateTo(SettingsDestination.Colors) }
|
onClick = { SettingsDestination.navigateTo(SettingsDestination.Colors) }
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
PrefDef(context, "theme_select_colors_night", R.string.select_user_colors_night, R.string.select_user_colors_summary) { def ->
|
PrefDef(context, NonSettingsPrefs.ADJUST_COLORS_NIGHT, R.string.select_user_colors_night, R.string.select_user_colors_summary) { def ->
|
||||||
Preference(
|
Preference(
|
||||||
name = def.title,
|
name = def.title,
|
||||||
description = def.description,
|
description = def.description,
|
||||||
|
@ -136,16 +161,14 @@ fun createAppearancePrefs(context: Context) = listOf(
|
||||||
PrefDef(context, Settings.PREF_NAVBAR_COLOR, R.string.theme_navbar, R.string.day_night_mode_summary) { def ->
|
PrefDef(context, Settings.PREF_NAVBAR_COLOR, R.string.theme_navbar, R.string.day_night_mode_summary) { def ->
|
||||||
SwitchPreference(def, Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
SwitchPreference(def, Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
||||||
},
|
},
|
||||||
// todo: non-settings pref
|
PrefDef(context, NonSettingsPrefs.BACKGROUND_IMAGE, R.string.customize_background_image) { def ->
|
||||||
PrefDef(context, "custom_background_image", R.string.customize_background_image) { def ->
|
|
||||||
var showDialog by remember { mutableStateOf(false) }
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
Preference(
|
Preference(
|
||||||
name = def.title,
|
name = def.title,
|
||||||
onClick = { showDialog = true }
|
onClick = { showDialog = true }
|
||||||
) // todo: create and show the dialog
|
) // todo: create and show the dialog
|
||||||
},
|
},
|
||||||
// todo: non-settings pref
|
PrefDef(context, NonSettingsPrefs.BACKGROUND_IMAGE_LANDSCAPE, R.string.customize_background_image_landscape, R.string.summary_customize_background_image_landscape) { def ->
|
||||||
PrefDef(context, "custom_background_image_landscape", R.string.customize_background_image_landscape, R.string.summary_customize_background_image_landscape) { def ->
|
|
||||||
var showDialog by remember { mutableStateOf(false) }
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
Preference(
|
Preference(
|
||||||
name = def.title,
|
name = def.title,
|
||||||
|
@ -153,7 +176,55 @@ fun createAppearancePrefs(context: Context) = listOf(
|
||||||
onClick = { showDialog = true }
|
onClick = { showDialog = true }
|
||||||
) // todo: create and show the dialog
|
) // todo: create and show the dialog
|
||||||
},
|
},
|
||||||
// todo: add misc category, then add functionality, then add to the actual screen
|
PrefDef(context, Settings.PREF_ENABLE_SPLIT_KEYBOARD, R.string.enable_split_keyboard) {
|
||||||
|
SwitchPreference(it, false)
|
||||||
|
},
|
||||||
|
PrefDef(context, Settings.PREF_SPLIT_SPACER_SCALE, R.string.split_spacer_scale) {
|
||||||
|
SliderPreference(
|
||||||
|
name = it.title,
|
||||||
|
pref = it.key,
|
||||||
|
default = SettingsValues.DEFAULT_SIZE_SCALE,
|
||||||
|
range = 0.5f..2f,
|
||||||
|
description = { "${(100 * it).toInt()}%" }
|
||||||
|
)
|
||||||
|
},
|
||||||
|
PrefDef(context, Settings.PREF_NARROW_KEY_GAPS, R.string.prefs_narrow_key_gaps) {
|
||||||
|
SwitchPreference(it, false)
|
||||||
|
},
|
||||||
|
PrefDef(context, Settings.PREF_KEYBOARD_HEIGHT_SCALE, R.string.prefs_keyboard_height_scale) {
|
||||||
|
SliderPreference(
|
||||||
|
name = it.title,
|
||||||
|
pref = it.key,
|
||||||
|
default = SettingsValues.DEFAULT_SIZE_SCALE,
|
||||||
|
range = 0.5f..1.5f,
|
||||||
|
description = { "${(100 * it).toInt()}%" }
|
||||||
|
)
|
||||||
|
},
|
||||||
|
PrefDef(context, Settings.PREF_BOTTOM_PADDING_SCALE, R.string.prefs_bottom_padding_scale) {
|
||||||
|
SliderPreference(
|
||||||
|
name = it.title,
|
||||||
|
pref = it.key,
|
||||||
|
default = SettingsValues.DEFAULT_SIZE_SCALE,
|
||||||
|
range = 0f..5f,
|
||||||
|
description = { "${(100 * it).toInt()}%" }
|
||||||
|
)
|
||||||
|
},
|
||||||
|
PrefDef(context, Settings.PREF_SPACE_BAR_TEXT, R.string.prefs_space_bar_text) { def ->
|
||||||
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
|
val prefs = LocalContext.current.prefs()
|
||||||
|
Preference(
|
||||||
|
name = def.title,
|
||||||
|
onClick = { showDialog = true },
|
||||||
|
description = prefs.getString(def.key, "")
|
||||||
|
) // todo: create and show the dialog
|
||||||
|
},
|
||||||
|
PrefDef(context, NonSettingsPrefs.CUSTOM_FONT, R.string.custom_font) { def ->
|
||||||
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
|
Preference(
|
||||||
|
name = def.title,
|
||||||
|
onClick = { showDialog = true },
|
||||||
|
) // todo: create and show the dialog
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue