Merge pull request #875 from MontesanoDev/fix/language-reset-on-restart

Fix/language reset on restart
This commit is contained in:
Nayif 2026-04-28 16:43:12 +05:30 committed by GitHub
commit 00fc401ab1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 10 deletions

View file

@ -18,7 +18,8 @@ actual object ThemeSettingsStorage {
private const val selectedThemeKey = "selected_theme" private const val selectedThemeKey = "selected_theme"
private const val amoledEnabledKey = "amoled_enabled" private const val amoledEnabledKey = "amoled_enabled"
private const val selectedAppLanguageKey = "selected_app_language" private const val selectedAppLanguageKey = "selected_app_language"
private val syncKeys = listOf(selectedThemeKey, amoledEnabledKey, selectedAppLanguageKey) private val profileScopedSyncKeys = listOf(selectedThemeKey, amoledEnabledKey)
private val globalSyncKeys = listOf(selectedAppLanguageKey)
private var preferences: SharedPreferences? = null private var preferences: SharedPreferences? = null
@ -50,13 +51,18 @@ actual object ThemeSettingsStorage {
?.apply() ?.apply()
} }
actual fun loadSelectedAppLanguage(): String? = actual fun loadSelectedAppLanguage(): String? {
preferences?.getString(ProfileScopedKey.of(selectedAppLanguageKey), null) val value = preferences?.getString(selectedAppLanguageKey, null)
if (value != null) return value
val legacy = preferences?.getString(ProfileScopedKey.of(selectedAppLanguageKey), null)
if (legacy != null) saveSelectedAppLanguage(legacy)
return legacy
}
actual fun saveSelectedAppLanguage(languageCode: String) { actual fun saveSelectedAppLanguage(languageCode: String) {
preferences preferences
?.edit() ?.edit()
?.putString(ProfileScopedKey.of(selectedAppLanguageKey), languageCode) ?.putString(selectedAppLanguageKey, languageCode)
?.apply() ?.apply()
} }
@ -74,7 +80,8 @@ actual object ThemeSettingsStorage {
actual fun replaceFromSyncPayload(payload: JsonObject) { actual fun replaceFromSyncPayload(payload: JsonObject) {
preferences?.edit()?.apply { preferences?.edit()?.apply {
syncKeys.forEach { remove(ProfileScopedKey.of(it)) } profileScopedSyncKeys.forEach { remove(ProfileScopedKey.of(it)) }
globalSyncKeys.forEach { remove(it) }
}?.apply() }?.apply()
payload.decodeSyncString(selectedThemeKey)?.let(::saveSelectedTheme) payload.decodeSyncString(selectedThemeKey)?.let(::saveSelectedTheme)

View file

@ -70,6 +70,7 @@ object ProfileRepository {
val stored = decodeStoredPayload() ?: return false val stored = decodeStoredPayload() ?: return false
loadedCacheForUserId = stored.userId loadedCacheForUserId = stored.userId
applyStoredPayload(stored) applyStoredPayload(stored)
ThemeSettingsRepository.onProfileChanged()
return _state.value.profiles.isNotEmpty() return _state.value.profiles.isNotEmpty()
} }

View file

@ -14,7 +14,8 @@ actual object ThemeSettingsStorage {
private const val selectedThemeKey = "selected_theme" private const val selectedThemeKey = "selected_theme"
private const val amoledEnabledKey = "amoled_enabled" private const val amoledEnabledKey = "amoled_enabled"
private const val selectedAppLanguageKey = "selected_app_language" private const val selectedAppLanguageKey = "selected_app_language"
private val syncKeys = listOf(selectedThemeKey, amoledEnabledKey, selectedAppLanguageKey) private val profileScopedSyncKeys = listOf(selectedThemeKey, amoledEnabledKey)
private val globalSyncKeys = listOf(selectedAppLanguageKey)
actual fun loadSelectedTheme(): String? = actual fun loadSelectedTheme(): String? =
NSUserDefaults.standardUserDefaults.stringForKey(ProfileScopedKey.of(selectedThemeKey)) NSUserDefaults.standardUserDefaults.stringForKey(ProfileScopedKey.of(selectedThemeKey))
@ -37,11 +38,16 @@ actual object ThemeSettingsStorage {
NSUserDefaults.standardUserDefaults.setBool(enabled, forKey = ProfileScopedKey.of(amoledEnabledKey)) NSUserDefaults.standardUserDefaults.setBool(enabled, forKey = ProfileScopedKey.of(amoledEnabledKey))
} }
actual fun loadSelectedAppLanguage(): String? = actual fun loadSelectedAppLanguage(): String? {
NSUserDefaults.standardUserDefaults.stringForKey(ProfileScopedKey.of(selectedAppLanguageKey)) val value = NSUserDefaults.standardUserDefaults.stringForKey(selectedAppLanguageKey)
if (value != null) return value
val legacy = NSUserDefaults.standardUserDefaults.stringForKey(ProfileScopedKey.of(selectedAppLanguageKey))
if (legacy != null) saveSelectedAppLanguage(legacy)
return legacy
}
actual fun saveSelectedAppLanguage(languageCode: String) { actual fun saveSelectedAppLanguage(languageCode: String) {
NSUserDefaults.standardUserDefaults.setObject(languageCode, forKey = ProfileScopedKey.of(selectedAppLanguageKey)) NSUserDefaults.standardUserDefaults.setObject(languageCode, forKey = selectedAppLanguageKey)
} }
actual fun applySelectedAppLanguage(languageCode: String) = Unit actual fun applySelectedAppLanguage(languageCode: String) = Unit
@ -53,9 +59,12 @@ actual object ThemeSettingsStorage {
} }
actual fun replaceFromSyncPayload(payload: JsonObject) { actual fun replaceFromSyncPayload(payload: JsonObject) {
syncKeys.forEach { key -> profileScopedSyncKeys.forEach { key ->
NSUserDefaults.standardUserDefaults.removeObjectForKey(ProfileScopedKey.of(key)) NSUserDefaults.standardUserDefaults.removeObjectForKey(ProfileScopedKey.of(key))
} }
globalSyncKeys.forEach { key ->
NSUserDefaults.standardUserDefaults.removeObjectForKey(key)
}
payload.decodeSyncString(selectedThemeKey)?.let(::saveSelectedTheme) payload.decodeSyncString(selectedThemeKey)?.let(::saveSelectedTheme)
payload.decodeSyncBoolean(amoledEnabledKey)?.let(::saveAmoledEnabled) payload.decodeSyncBoolean(amoledEnabledKey)?.let(::saveAmoledEnabled)