From 1ad708c110180b8c1a803979fb314a8b7fe5a88a Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Fri, 14 Feb 2025 16:46:43 +0530 Subject: [PATCH] Setting the chosen language in AppCompatDelegate to update the selected language globally so that it is displayed in the system settings. --- .../core/settings/CorePrefsFragment.kt | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt index 8278b8128..7e3dfd0aa 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt @@ -33,7 +33,9 @@ import android.webkit.WebView import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat +import androidx.core.os.LocaleListCompat import androidx.lifecycle.lifecycleScope import androidx.preference.EditTextPreference import androidx.preference.ListPreference @@ -51,12 +53,10 @@ import org.kiwix.kiwixmobile.core.compat.CompatHelper.Companion.getVersionCode import org.kiwix.kiwixmobile.core.dao.LibkiwixBookmarks import org.kiwix.kiwixmobile.core.extensions.toast import org.kiwix.kiwixmobile.core.main.AddNoteDialog -import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.navigateToAppSettings import org.kiwix.kiwixmobile.core.utils.EXTERNAL_SELECT_POSITION import org.kiwix.kiwixmobile.core.utils.INTERNAL_SELECT_POSITION import org.kiwix.kiwixmobile.core.utils.LanguageUtils -import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.dialog.DialogShower import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog @@ -161,7 +161,12 @@ abstract class CorePrefsFragment : var languageCodeList = LanguageUtils(requireActivity()).keys languageCodeList = listOf(Locale.ROOT.language) + languageCodeList sharedPreferenceUtil?.let { sharedPreferenceUtil -> - val selectedLang = selectedLanguage(languageCodeList, sharedPreferenceUtil.prefLanguage) + val selectedLang = if (!AppCompatDelegate.getApplicationLocales().isEmpty) { + // Fetches the current Application Locale from the list + AppCompatDelegate.getApplicationLocales()[0]?.language + } else { + selectedLanguage(languageCodeList, sharedPreferenceUtil.prefLanguage) + } languagePref.entries = languageDisplayValues(languageCodeList) languagePref.entryValues = languageCodeList.toTypedArray() languagePref.setDefaultValue(selectedLang) @@ -176,9 +181,7 @@ abstract class CorePrefsFragment : Preference.OnPreferenceChangeListener { _, newValue -> val languageCode = newValue as String? languageCode?.let { - handleLocaleChange(requireActivity(), it, sharedPreferenceUtil) - sharedPreferenceUtil.putPrefLanguage(it) - restartActivity() + AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(it)) } true } @@ -186,15 +189,6 @@ abstract class CorePrefsFragment : } } - private fun restartActivity() { - (activity as CoreMainActivity?)?.let { - it.navController.apply { - popBackStack() - navigate(it.settingsFragmentResId) - } - } - } - private fun selectedLanguage( languageCodeList: List, langPref: String