Browse Source

Saving state of selected language on shared prefs and handle state

Khubaib 6 tháng trước cách đây
mục cha
commit
3ff7336ad3

+ 14 - 0
app/src/main/java/com/vpn/fastestvpnservice/helpers/BasePreferenceHelper.kt

@@ -51,6 +51,7 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         removePreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS)
         removePreference(context, KEY_FILENAME, KEY_FEEDBACK)
         removePreference(context, KEY_FILENAME, KEY_LAUNCH)
+        removePreference(context, KEY_FILENAME, LANGUAGE)
     }
 
     fun clearServerObject() {
@@ -464,6 +465,18 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         }
     }
 
+    fun saveLanguage(language: String) {
+        putStringPreference(context, KEY_FILENAME, LANGUAGE, language)
+    }
+
+    fun getLanguage(): String {
+        return try {
+            getStringPreference(context, KEY_FILENAME, LANGUAGE, languages[0].name)
+        } catch (ex: Exception) {
+            languages[0].name
+        }
+    }
+
     fun saveFilterList(filter: String) {
         putStringPreference(context, KEY_FILENAME, FILTER, filter)
     }
@@ -637,5 +650,6 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         private const val KEY_RECENTLY_SERVERS = "keydata_recently_servers"
         private const val KEY_FEEDBACK = "key_feedback"
         private const val KEY_LAUNCH = "key_launch"
+        private const val LANGUAGE = "key_language"
     }
 }

+ 30 - 22
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -1081,6 +1081,7 @@ fun SelectLanguage(
     val sheetState = rememberModalBottomSheetState()
     val context = LocalContext.current
     val basePreferenceHelper = BasePreferenceHelper(context)
+    var selectedLanguage by remember { mutableStateOf(basePreferenceHelper.getLanguage()) }
 
     Row(
         modifier = Modifier
@@ -1189,12 +1190,16 @@ fun SelectLanguage(
                                 .background(Color.Transparent)
                                 .padding(start = 2.dp)
                                 .selectable(
-                                    selected = language == languages[0],
+                                    selected = language.name == selectedLanguage,
                                     onClick = {
+                                        selectedLanguage = language.name
+                                        basePreferenceHelper.saveLanguage(selectedLanguage)
+
                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                             context.getSystemService(LocaleManager::class.java).applicationLocales =
                                                 LocaleList.forLanguageTags(language.code)
-                                        } else {
+                                        }
+                                        else {
                                             AppCompatDelegate.setApplicationLocales(
                                                 LocaleListCompat.forLanguageTags(
                                                     language.code
@@ -1206,14 +1211,7 @@ fun SelectLanguage(
                                                 },
                                                 context.resources.displayMetrics
                                             )
-//                                            Log.d(
-//                                                "test_settings_screen",
-//                                                "Click = " + AppCompatDelegate
-//                                                    .getApplicationLocales()
-//                                                    .toString()
-//                                            )
                                             changeLanguage(context.getString(R.string.settings))
-
                                         }
                                         isLanguageSheetOpen = false
                                     },
@@ -1229,20 +1227,30 @@ fun SelectLanguage(
                         ) {
 //                            val themeState = isSystemInDarkTheme()
 //                            val isSystemInDarkTheme by remember { mutableStateOf(themeState) }
-                            RadioButton(selected = language == languages[0],
+                            RadioButton(
+                                selected = language.name == selectedLanguage,
                                 onClick = {
-//                                    selectedtheme.value = theme
-//                                    basePreferenceHelper.saveTheme(selectedtheme.value)
-
-//                                    if (selectedtheme.value == themesList[0])
-//                                    {
-//                                        Log.d("test_theme", "true: -> $systemTheme")
-//                                        isDarkTheme.value = systemTheme
-//                                    }
-//                                    else {
-//                                        Log.d("test_theme", "false: -> $systemTheme")
-//                                        isDarkTheme.value = selectedtheme.value == themesList[2]
-//                                    }
+                                    selectedLanguage = language.name
+                                    basePreferenceHelper.saveLanguage(selectedLanguage)
+
+                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+                                        context.getSystemService(LocaleManager::class.java).applicationLocales =
+                                            LocaleList.forLanguageTags(language.code)
+                                    }
+                                    else {
+                                        AppCompatDelegate.setApplicationLocales(
+                                            LocaleListCompat.forLanguageTags(
+                                                language.code
+                                            )
+                                        )
+                                        context.resources.updateConfiguration(
+                                            context.resources.configuration.apply {
+                                                setLocale(Locale.forLanguageTag(language.code))
+                                            },
+                                            context.resources.displayMetrics
+                                        )
+                                        changeLanguage(context.getString(R.string.settings))
+                                    }
                                     isLanguageSheetOpen = false
                                 },
                                 colors = RadioButtonDefaults.colors(