Merge pull request #1249 from Isilsolme/fix/language-preference-apply-to-commit

Fix language preference not persisting after app restart
This commit is contained in:
Kudomaga authored and GitHub committed 2026-06-01 00:33:41 +08:00
commit 2f7b5e16df
3 files changed
+10 -3

No files matched your search

@@ -17,6 +17,7 @@ import io.legado.app.utils.putPrefFloat
import io.legado.app.utils.putPrefInt import io.legado.app.utils.putPrefInt
import io.legado.app.utils.putPrefLong import io.legado.app.utils.putPrefLong
import io.legado.app.utils.putPrefString import io.legado.app.utils.putPrefString
import io.legado.app.utils.putPrefStringSync
import splitties.init.appCtx import splitties.init.appCtx
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -34,6 +35,7 @@ fun <T> prefDelegate(
key: String, key: String,
defaultValue: T, defaultValue: T,
lifecycleOwner: LifecycleOwner? = null, lifecycleOwner: LifecycleOwner? = null,
sync: Boolean = false,
onValueChange: ((T) -> Unit)? = null onValueChange: ((T) -> Unit)? = null
): PrefDelegate<T> { ): PrefDelegate<T> {
return object : PrefDelegate<T>, SharedPreferences.OnSharedPreferenceChangeListener, DefaultLifecycleObserver { return object : PrefDelegate<T>, SharedPreferences.OnSharedPreferenceChangeListener, DefaultLifecycleObserver {
@@ -84,7 +86,7 @@ fun <T> prefDelegate(
override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
if (_value.value != value) { if (_value.value != value) {
when (value) { when (value) {
is String? -> appCtx.putPrefString(key, value) is String? -> if (sync) appCtx.putPrefStringSync(key, value) else appCtx.putPrefString(key, value)
is Int -> appCtx.putPrefInt(key, value) is Int -> appCtx.putPrefInt(key, value)
is Boolean -> appCtx.putPrefBoolean(key, value) is Boolean -> appCtx.putPrefBoolean(key, value)
is Long -> appCtx.putPrefLong(key, value) is Long -> appCtx.putPrefLong(key, value)
@@ -111,8 +113,9 @@ fun <T> prefStateDelegate(
key: String, key: String,
defaultValue: T, defaultValue: T,
lifecycleOwner: LifecycleOwner? = null, lifecycleOwner: LifecycleOwner? = null,
sync: Boolean = false,
onValueChange: ((T) -> Unit)? = null onValueChange: ((T) -> Unit)? = null
): PrefStateDelegate<T> { ): PrefStateDelegate<T> {
val delegate = prefDelegate(key, defaultValue, lifecycleOwner, onValueChange) val delegate = prefDelegate(key, defaultValue, lifecycleOwner, sync, onValueChange)
return PrefStateDelegate(delegate) return PrefStateDelegate(delegate)
} }
@@ -8,7 +8,8 @@ object OtherConfig {
var language by prefDelegate( var language by prefDelegate(
PreferKey.language, PreferKey.language,
"auto" "auto",
sync = true
) )
var updateToVariant by prefDelegate( var updateToVariant by prefDelegate(
@@ -223,6 +223,9 @@ fun Context.getPrefString(key: String, defValue: String? = null) =
fun Context.putPrefString(key: String, value: String?) = fun Context.putPrefString(key: String, value: String?) =
defaultSharedPreferences.edit { putString(key, value) } defaultSharedPreferences.edit { putString(key, value) }
fun Context.putPrefStringSync(key: String, value: String?) =
defaultSharedPreferences.edit(commit = true) { putString(key, value) }
fun Context.getPrefStringSet( fun Context.getPrefStringSet(
key: String, key: String,
defValue: MutableSet<String>? = null, defValue: MutableSet<String>? = null,