mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-10 00:27:45 +00:00
make sure the right theme is shown in colors screen
proobably there is a way to do it more straightforward...
This commit is contained in:
parent
f8bdd7dd1c
commit
9bb087b422
3 changed files with 47 additions and 3 deletions
|
@ -39,6 +39,7 @@ import helium314.keyboard.latin.utils.StatsUtils;
|
||||||
import helium314.keyboard.latin.utils.SubtypeSettingsKt;
|
import helium314.keyboard.latin.utils.SubtypeSettingsKt;
|
||||||
import helium314.keyboard.latin.utils.ToolbarKey;
|
import helium314.keyboard.latin.utils.ToolbarKey;
|
||||||
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
import helium314.keyboard.latin.utils.ToolbarUtilsKt;
|
||||||
|
import helium314.keyboard.settings.SettingsActivity;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -502,7 +503,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
||||||
|
|
||||||
public static Colors getColorsForCurrentTheme(final Context context, final SharedPreferences prefs) {
|
public static Colors getColorsForCurrentTheme(final Context context, final SharedPreferences prefs) {
|
||||||
boolean isNight = ResourceUtils.isNight(context.getResources());
|
boolean isNight = ResourceUtils.isNight(context.getResources());
|
||||||
if (ColorsSettingsFragment.Companion.getForceOppositeTheme()) isNight = !isNight;
|
if (SettingsActivity.Companion.getForceOppositeTheme()) isNight = !isNight;
|
||||||
else isNight = isNight && prefs.getBoolean(PREF_THEME_DAY_NIGHT, Defaults.PREF_THEME_DAY_NIGHT);
|
else isNight = isNight && prefs.getBoolean(PREF_THEME_DAY_NIGHT, Defaults.PREF_THEME_DAY_NIGHT);
|
||||||
final String themeName = (isNight)
|
final String themeName = (isNight)
|
||||||
? prefs.getString(Settings.PREF_THEME_COLORS_NIGHT, Defaults.PREF_THEME_COLORS_NIGHT)
|
? prefs.getString(Settings.PREF_THEME_COLORS_NIGHT, Defaults.PREF_THEME_COLORS_NIGHT)
|
||||||
|
|
|
@ -77,11 +77,34 @@ class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferen
|
||||||
super.onStop()
|
super.onStop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
paused = true
|
||||||
|
if (forceOppositeTheme) keyboardNeedsReload = true
|
||||||
|
forceOppositeTheme = false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
paused = false
|
||||||
|
}
|
||||||
|
|
||||||
|
private var paused = true
|
||||||
|
fun setForceOppositeTheme(opposite: Boolean) {
|
||||||
|
if (paused) return
|
||||||
|
if (forceOppositeTheme != opposite) {
|
||||||
|
keyboardNeedsReload = true
|
||||||
|
}
|
||||||
|
forceOppositeTheme = opposite
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
// public write so compose previews can show the screens
|
// public write so compose previews can show the screens
|
||||||
// having it in a companion object is not ideal as it will stay in memory even after settings are closed
|
// having it in a companion object is not ideal as it will stay in memory even after settings are closed
|
||||||
// but it's small enough to not care
|
// but it's small enough to not care
|
||||||
lateinit var settingsContainer: SettingsContainer
|
lateinit var settingsContainer: SettingsContainer
|
||||||
|
|
||||||
|
var forceOppositeTheme = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSharedPreferenceChanged(prefereces: SharedPreferences?, key: String?) {
|
override fun onSharedPreferenceChanged(prefereces: SharedPreferences?, key: String?) {
|
||||||
|
|
|
@ -20,6 +20,8 @@ import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextField
|
import androidx.compose.material3.TextField
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
@ -35,6 +37,8 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import helium314.keyboard.keyboard.ColorSetting
|
import helium314.keyboard.keyboard.ColorSetting
|
||||||
import helium314.keyboard.keyboard.KeyboardTheme
|
import helium314.keyboard.keyboard.KeyboardTheme
|
||||||
import helium314.keyboard.latin.R
|
import helium314.keyboard.latin.R
|
||||||
|
@ -45,6 +49,7 @@ import helium314.keyboard.latin.settings.Settings
|
||||||
import helium314.keyboard.latin.settings.colorPrefsAndResIds
|
import helium314.keyboard.latin.settings.colorPrefsAndResIds
|
||||||
import helium314.keyboard.latin.settings.getColorPrefsToHideInitially
|
import helium314.keyboard.latin.settings.getColorPrefsToHideInitially
|
||||||
import helium314.keyboard.latin.utils.Log
|
import helium314.keyboard.latin.utils.Log
|
||||||
|
import helium314.keyboard.latin.utils.ResourceUtils
|
||||||
import helium314.keyboard.latin.utils.getActivity
|
import helium314.keyboard.latin.utils.getActivity
|
||||||
import helium314.keyboard.latin.utils.prefs
|
import helium314.keyboard.latin.utils.prefs
|
||||||
import helium314.keyboard.settings.SearchScreen
|
import helium314.keyboard.settings.SearchScreen
|
||||||
|
@ -58,13 +63,28 @@ fun ColorsScreen(
|
||||||
onClickBack: () -> Unit
|
onClickBack: () -> Unit
|
||||||
) {
|
) {
|
||||||
// todo:
|
// todo:
|
||||||
// need to force opposite theme if necessary!
|
|
||||||
// allow save (load should be in theme selector, maybe here too)
|
// allow save (load should be in theme selector, maybe here too)
|
||||||
// import/export should now also store theme name
|
// import/export should now also store theme name
|
||||||
// handle name collisions on load by simply appending a number
|
// handle name collisions on load by simply appending a number
|
||||||
// make sure import of old colors works
|
// make sure import of old colors works
|
||||||
|
|
||||||
val ctx = LocalContext.current
|
val ctx = LocalContext.current
|
||||||
|
|
||||||
|
// is there really no better way of only setting forceOpposite while the screen is shown (and not paused)?
|
||||||
|
// lifecycle stuff is weird, there is no pause and similar when activity is paused
|
||||||
|
DisposableEffect(isNight) {
|
||||||
|
onDispose { // works on pressing back
|
||||||
|
(ctx.getActivity() as? SettingsActivity)?.setForceOppositeTheme(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(ctx.getActivity() as? SettingsActivity)?.setForceOppositeTheme(isNight != ResourceUtils.isNight(ctx.resources))
|
||||||
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
|
val lifecycleState by lifecycleOwner.lifecycle.currentStateFlow.collectAsState()
|
||||||
|
LaunchedEffect(lifecycleState) {
|
||||||
|
if (lifecycleState == Lifecycle.State.RESUMED)
|
||||||
|
(ctx.getActivity() as? SettingsActivity)?.setForceOppositeTheme(isNight != ResourceUtils.isNight(ctx.resources))
|
||||||
|
}
|
||||||
|
|
||||||
val prefs = ctx.prefs()
|
val prefs = ctx.prefs()
|
||||||
val b = (ctx.getActivity() as? SettingsActivity)?.prefChanged?.collectAsState()
|
val b = (ctx.getActivity() as? SettingsActivity)?.prefChanged?.collectAsState()
|
||||||
if ((b?.value ?: 0) < 0)
|
if ((b?.value ?: 0) < 0)
|
||||||
|
@ -107,7 +127,7 @@ fun ColorsScreen(
|
||||||
newThemeName = it
|
newThemeName = it
|
||||||
nameField = it
|
nameField = it
|
||||||
},
|
},
|
||||||
// modifier = Modifier.weight(1f)
|
modifier = Modifier.weight(1f)
|
||||||
)
|
)
|
||||||
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.secondary) {
|
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.secondary) {
|
||||||
// todo: this should indicate whether name is saved, but looks like a button
|
// todo: this should indicate whether name is saved, but looks like a button
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue