瀏覽代碼

Changed UI for select language also added subtitle to it (Language Model Class)

Khubaib 7 月之前
父節點
當前提交
7abe8ad0b7

+ 2 - 2
.idea/deploymentTargetSelector.xml

@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-09-02T13:20:15.651517541Z">
+        <DropdownSelection timestamp="2024-09-05T14:43:29.814309174Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="LocalEmulator" identifier="path=/home/ubuntu/.android/avd/Television_1080p_API_31.avd" />
+              <DeviceId pluginId="PhysicalDevice" identifier="serial=1C051FDF60048Z" />
             </handle>
           </Target>
         </DropdownSelection>

+ 13 - 13
app/src/main/java/com/vpn/fastestvpnservice/beans/Dark_Light_Theme.kt

@@ -8,19 +8,19 @@ val themesList = listOf<String>(
 )
 
 val languages = listOf<Language>(
-    Language("English","en"),
-    Language("German","de"),
-    Language("French","fr"),
-    Language("Spanish", "es"),
-    Language("Italian", "it"),
-    Language("Polish", "pl"),
-    Language("Russian", "ru"),
-    Language("Chinese", "zh-CN"),
-    Language("Japanese", "ja"),
-    Language("Swedish", "sv"),
-    Language("Turkish", "tr"),
-    Language("Portuguese", "pt"),
-    Language("Dutch", "nl"),
+    Language("English", "English","en"),
+    Language("中文", "Chinese", "zh-CN"),
+    Language("Nederlands", "Dutch", "nl"),
+    Language("Français", "French","fr"),
+    Language("Deutsch", "German","de"),
+    Language("Italiano", "Italian", "it"),
+    Language("日本語", "Japanese", "ja"),
+    Language("Polski", "Polish", "pl"),
+    Language("Português", "Portuguese", "pt"),
+    Language("Русский", "Russian", "ru"),
+    Language("Español", "Spanish", "es"),
+    Language("Svenska", "Swedish", "sv"),
+    Language("Türkçe", "Turkish", "tr"),
     )
 
 var isDarkTheme: MutableState<Boolean> = mutableStateOf(false)

+ 1 - 1
app/src/main/java/com/vpn/fastestvpnservice/beans/Protocol.kt

@@ -5,5 +5,5 @@ class Protocol(
 )
 
 class Language(
-    var name:String, var code:String
+    var title:String, var subTitle:String, var identifier:String
 )

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

@@ -471,9 +471,9 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
 
     fun getLanguage(): String {
         return try {
-            getStringPreference(context, KEY_FILENAME, LANGUAGE, languages[0].name)
+            getStringPreference(context, KEY_FILENAME, LANGUAGE, languages[0].identifier)
         } catch (ex: Exception) {
-            languages[0].name
+            languages[0].identifier
         }
     }
 

+ 94 - 35
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -22,6 +22,7 @@ import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.Row
@@ -249,7 +250,9 @@ fun Settings(navHostController: NavHostController, activity: ComponentActivity)
                     }
                 )
 
-                SelectLanguage(icon = Icons.Default.Language, text = context.getString(R.string.language)) {
+                SelectLanguage(
+                    icon = Icons.Default.Language,
+                    text = context.getString(R.string.language)) {
                     settingsString = it
                 }
 
@@ -1175,51 +1178,58 @@ fun SelectLanguage(
                 .padding(top = 15.dp)
                 .fillMaxSize()
         ) {
-            Box(
+            Column(
                 modifier = Modifier
                     .background(Color.Transparent)
                     .fillMaxSize()
-                    .padding(start = 0.dp, top = 10.dp, bottom = 10.dp),
+                    .padding(start = 0.dp, top = 10.dp, bottom = 25.dp),
             ) {
+                AddTextSettingsLanguage(
+                    text = context.getString(R.string.select_language),
+                    size = 18.sp,
+                    color = MaterialTheme.colorScheme.primary,
+                    bottomPadding = 20.dp,
+                    startPadding = 16.dp,
+                    style = MaterialTheme.typography.customTypography.displayLarge.copy(
+                        color = MaterialTheme.colorScheme.primary
+                    ),
+                )
                 Column(
                     verticalArrangement = Arrangement.Top,
                     horizontalAlignment = Alignment.Start,
-                    modifier = Modifier.verticalScroll(rememberScrollState())
+                    modifier = Modifier
+                        .fillMaxSize()
+                        .verticalScroll(rememberScrollState())
+                        .padding(top = 0.dp)
                 ) {
-                    AddTextSettings(
-                        text = context.getString(R.string.language),
-                        size = 18.sp,
-                        color = MaterialTheme.colorScheme.primary,
-                        bottomPadding = 20.dp,
-                        startPadding = 16.dp,
-                        style = MaterialTheme.typography.titleSmall,
-                    )
                     languages.forEach { language ->
-
                         Row(
                             modifier = Modifier
                                 .fillMaxWidth()
-                                .background(Color.Transparent)
-                                .padding(start = 2.dp)
+                                .height(80.dp)
+                                .background(
+                                    if (language.title == selectedLanguage) Color.Transparent
+                                    else Color.Transparent
+                                )
+                                .padding(start = 2.dp, top = 15.dp)
                                 .selectable(
-                                    selected = language.name == selectedLanguage,
+                                    selected = language.title == selectedLanguage,
                                     onClick = {
-                                        selectedLanguage = language.name
+                                        selectedLanguage = language.title
                                         basePreferenceHelper.saveLanguage(selectedLanguage)
 
                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                             context.getSystemService(LocaleManager::class.java).applicationLocales =
-                                                LocaleList.forLanguageTags(language.code)
-                                        }
-                                        else {
+                                                LocaleList.forLanguageTags(language.identifier)
+                                        } else {
                                             AppCompatDelegate.setApplicationLocales(
                                                 LocaleListCompat.forLanguageTags(
-                                                    language.code
+                                                    language.identifier
                                                 )
                                             )
                                             context.resources.updateConfiguration(
                                                 context.resources.configuration.apply {
-                                                    setLocale(Locale.forLanguageTag(language.code))
+                                                    setLocale(Locale.forLanguageTag(language.identifier))
                                                 },
                                                 context.resources.displayMetrics
                                             )
@@ -1239,27 +1249,25 @@ fun SelectLanguage(
                             ,
                             verticalAlignment = Alignment.CenterVertically
                         ) {
-//                            val themeState = isSystemInDarkTheme()
-//                            val isSystemInDarkTheme by remember { mutableStateOf(themeState) }
                             RadioButton(
-                                selected = language.name == selectedLanguage,
+                                selected = language.title == selectedLanguage,
                                 onClick = {
-                                    selectedLanguage = language.name
+                                    selectedLanguage = language.title
                                     basePreferenceHelper.saveLanguage(selectedLanguage)
 
                                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                         context.getSystemService(LocaleManager::class.java).applicationLocales =
-                                            LocaleList.forLanguageTags(language.code)
+                                            LocaleList.forLanguageTags(language.identifier)
                                     }
                                     else {
                                         AppCompatDelegate.setApplicationLocales(
                                             LocaleListCompat.forLanguageTags(
-                                                language.code
+                                                language.identifier
                                             )
                                         )
                                         context.resources.updateConfiguration(
                                             context.resources.configuration.apply {
-                                                setLocale(Locale.forLanguageTag(language.code))
+                                                setLocale(Locale.forLanguageTag(language.identifier))
                                             },
                                             context.resources.displayMetrics
                                         )
@@ -1272,14 +1280,46 @@ fun SelectLanguage(
                                 colors = RadioButtonDefaults.colors(
                                     selectedColor = colorResource(id = R.color.radio_button_blue),
                                     unselectedColor = colorResource(id = R.color.gray_icon),
-                                )
-                            )
-                            Text(text = language.name,
-                                modifier = Modifier.padding(start = 12.dp),
-                                style = MaterialTheme.typography.bodySmall,
-                                color = MaterialTheme.colorScheme.primary
+                                ),
+                                modifier = Modifier.align(Alignment.CenterVertically)
                             )
+                            Column(
+                                modifier = Modifier
+                                    .fillMaxWidth()
+                                    .fillMaxHeight()
+                                    .padding(start = 5.dp)
+                                    .background(
+                                        if (language.title == selectedLanguage) Color.Transparent
+                                        else Color.Transparent
+                                    ),
+                                verticalArrangement = Arrangement.Center
+                            ) {
+                                Text(text = language.title,
+                                    modifier = Modifier.padding(start = 0.dp),
+                                    style = MaterialTheme.typography.customTypography.displayLarge.copy(
+                                        fontSize = 16.sp
+                                    ),
+                                    color = MaterialTheme.colorScheme.primary
+                                )
+                                Text(text = language.subTitle,
+                                    style = MaterialTheme.typography.bodySmall,
+                                    color = MaterialTheme.colorScheme.primary,
+                                    modifier = Modifier
+                                        .padding(top = 2.dp)
+                                        .alpha(0.4f),
+                                    )
+
+
+                            }
                         }
+                        Surface(
+                            modifier = Modifier
+                                .padding(start = 55.dp)
+                                .height(1.dp)
+                                .fillMaxWidth()
+                                .alpha(0.2F),
+                            color = colorResource(id = R.color.gray_icon)
+                        ) {}
                     }
                 }
             }
@@ -1648,6 +1688,25 @@ fun ColumnScope.AddTextSettings(
     )
 }
 
+@Composable
+fun ColumnScope.AddTextSettingsLanguage(
+    text: String,
+    size: TextUnit,
+    color: Color,
+    bottomPadding: Dp = 0.dp,
+    startPadding: Dp = 0.dp,
+    style: TextStyle,
+) {
+    Text(
+        text = text,
+        style = style,
+        color = color,
+        modifier = Modifier
+            .padding(bottom = bottomPadding, start = startPadding)
+            .align(Alignment.CenterHorizontally)
+    )
+}
+
 @Preview
 @Composable
 fun SettingsPreview() {

+ 11 - 11
app/src/main/java/com/vpn/fastestvpnservice/screensTV/SettingsScreenTV.kt

@@ -1542,23 +1542,23 @@ fun AddLanguageTV(
                                     isAnyItemFocused = it.isFocused
                                 }
                                 .selectable(
-                                    selected = language.name == selectedLanguage,
+                                    selected = language.title == selectedLanguage,
                                     onClick = {
-                                        selectedLanguage = language.name
+                                        selectedLanguage = language.title
                                         basePreferenceHelper.saveLanguage(selectedLanguage)
 
                                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                             context.getSystemService(LocaleManager::class.java).applicationLocales =
-                                                LocaleList.forLanguageTags(language.code)
+                                                LocaleList.forLanguageTags(language.identifier)
                                         } else {
                                             AppCompatDelegate.setApplicationLocales(
                                                 LocaleListCompat.forLanguageTags(
-                                                    language.code
+                                                    language.identifier
                                                 )
                                             )
                                             context.resources.updateConfiguration(
                                                 context.resources.configuration.apply {
-                                                    setLocale(Locale.forLanguageTag(language.code))
+                                                    setLocale(Locale.forLanguageTag(language.identifier))
                                                 },
                                                 context.resources.displayMetrics
                                             )
@@ -1579,24 +1579,24 @@ fun AddLanguageTV(
 //                            val themeState = isSystemInDarkTheme()
 //                            val isSystemInDarkTheme by remember { mutableStateOf(themeState) }
                             RadioButton(
-                                selected = language.name == selectedLanguage,
+                                selected = language.title == selectedLanguage,
                                 onClick = {
-                                    selectedLanguage = language.name
+                                    selectedLanguage = language.title
                                     basePreferenceHelper.saveLanguage(selectedLanguage)
 
                                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                                         context.getSystemService(LocaleManager::class.java).applicationLocales =
-                                            LocaleList.forLanguageTags(language.code)
+                                            LocaleList.forLanguageTags(language.identifier)
                                     }
                                     else {
                                         AppCompatDelegate.setApplicationLocales(
                                             LocaleListCompat.forLanguageTags(
-                                                language.code
+                                                language.identifier
                                             )
                                         )
                                         context.resources.updateConfiguration(
                                             context.resources.configuration.apply {
-                                                setLocale(Locale.forLanguageTag(language.code))
+                                                setLocale(Locale.forLanguageTag(language.identifier))
                                             },
                                             context.resources.displayMetrics
                                         )
@@ -1609,7 +1609,7 @@ fun AddLanguageTV(
                                     unselectedColor = colorResource(id = R.color.gray_icon),
                                 )
                             )
-                            Text(text = language.name,
+                            Text(text = language.title,
                                 modifier = Modifier.padding(start = 12.dp),
                                 style = MaterialTheme.typography.bodySmall,
                                 color = MaterialTheme.colorScheme.primary

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -551,6 +551,7 @@
     <string name="all_apps_use_vpn">All apps use the VPN</string>
     <string name="only_selected_apps_use_vpn">Only allow selected apps to use the VPN</string>
     <string name="only_selected_apps_not_use_vpn">Do not allow selected apps to use the VPN</string>
+    <string name="select_language">Select Language</string>
 
     <!-- Help Screen -->
     <string name="help">Help</string>