diff --git a/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt b/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt index 67fffcf..fc90792 100644 --- a/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt +++ b/android/src/main/java/com/localizationsettings/LocalizationSettingsModule.kt @@ -1,8 +1,10 @@ package com.localizationsettings +import android.app.LocaleManager import android.content.Context import android.content.SharedPreferences import android.os.Build +import android.os.LocaleList import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.LocaleListCompat import com.facebook.react.bridge.Promise @@ -41,14 +43,14 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC private fun getCurrentLanguage(): String? { // If API version is >= 33, then use per-app language settings if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val currentLocaleName = if (!AppCompatDelegate.getApplicationLocales().isEmpty) { - // get per-app language - AppCompatDelegate.getApplicationLocales()[0]?.toLanguageTag() + // Use LocaleManager directly to read per-app language set in Android Settings + val localeManager = reactApplicationContext.getSystemService(LocaleManager::class.java) + val appLocales = localeManager?.applicationLocales + return if (appLocales != null && !appLocales.isEmpty) { + appLocales[0]?.toLanguageTag() } else { - // Fallback to the default System Locale Locale.getDefault().toLanguageTag() } - return currentLocaleName } // if API is < 33, then use SharedPreferences with fallback to default System Locale if (getPreferences().getString("languageFrom", null) == Locale.getDefault().language) { @@ -68,8 +70,11 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC private fun setCurrentLanguage(language: String) { // If API version is >= 33, then use per-app language settings if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val localeList = LocaleListCompat.forLanguageTags(getLanguageTag(language)) - AppCompatDelegate.setApplicationLocales(localeList) + // Use LocaleManager directly to ensure sync with Android Settings + val localeManager = reactApplicationContext.getSystemService(LocaleManager::class.java) + val languageTag = getLanguageTag(language) + val localeList = LocaleList.forLanguageTags(languageTag) + localeManager?.applicationLocales = localeList } else { // if API is < 33, then set SharedPreferences language val editor = getEditor();