|
@@ -1,11 +1,13 @@
|
|
|
package com.vpn.fastestvpnservice.screens.bottomNavBarScreens
|
|
|
|
|
|
import android.app.Activity
|
|
|
+import android.app.LocaleManager
|
|
|
import android.content.Context
|
|
|
import android.content.Intent
|
|
|
import android.os.Build
|
|
|
import android.os.Bundle
|
|
|
import android.os.Handler
|
|
|
+import android.os.LocaleList
|
|
|
import android.util.Log
|
|
|
import android.widget.Toast
|
|
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
|
@@ -33,6 +35,7 @@ import androidx.compose.foundation.selection.selectable
|
|
|
import androidx.compose.foundation.verticalScroll
|
|
|
import androidx.compose.material.icons.Icons
|
|
|
import androidx.compose.material.icons.filled.DarkMode
|
|
|
+import androidx.compose.material.icons.filled.Language
|
|
|
import androidx.compose.material3.DockedSearchBar
|
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
|
import androidx.compose.material3.Icon
|
|
@@ -85,6 +88,7 @@ import androidx.navigation.compose.rememberNavController
|
|
|
import com.vpn.fastestvpnservice.R
|
|
|
import com.vpn.fastestvpnservice.beans.Protocol
|
|
|
import com.vpn.fastestvpnservice.beans.isDarkTheme
|
|
|
+import com.vpn.fastestvpnservice.beans.languages
|
|
|
import com.vpn.fastestvpnservice.beans.themesList
|
|
|
import com.vpn.fastestvpnservice.constants.AppEnum
|
|
|
import com.vpn.fastestvpnservice.constants.smartConnect
|
|
@@ -141,7 +145,7 @@ fun Settings(navHostController: NavHostController) {
|
|
|
|
|
|
Spacer(modifier = Modifier.height(50.dp))
|
|
|
AddTextSettings(
|
|
|
- text = "Settings",
|
|
|
+ text = context.resources.getString(R.string.settings),
|
|
|
size = 28.sp,
|
|
|
color = MaterialTheme.colorScheme.primary,
|
|
|
style = MaterialTheme.typography.headlineLarge
|
|
@@ -198,6 +202,8 @@ fun Settings(navHostController: NavHostController) {
|
|
|
AddRowDarkLightTheme(
|
|
|
icon = Icons.Default.DarkMode,
|
|
|
text = "Theme")
|
|
|
+
|
|
|
+ SelectLanguage(icon = Icons.Default.Language, text = "Language")
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -774,6 +780,182 @@ fun AddRowDarkLightTheme(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+@OptIn(ExperimentalMaterial3Api::class)
|
|
|
+@Composable
|
|
|
+fun SelectLanguage(
|
|
|
+ icon: ImageVector,
|
|
|
+ text: String,
|
|
|
+) {
|
|
|
+ var isLanguageSheetOpen by remember { mutableStateOf(false) }
|
|
|
+ val sheetState = rememberModalBottomSheetState()
|
|
|
+ val context = LocalContext.current
|
|
|
+ val basePreferenceHelper = BasePreferenceHelper(context)
|
|
|
+
|
|
|
+ Row(
|
|
|
+ modifier = Modifier
|
|
|
+ .fillMaxWidth()
|
|
|
+ .padding(top = 40.dp, end = 27.dp)
|
|
|
+ .background(Color.Transparent)
|
|
|
+ .pointerInput(Unit) {
|
|
|
+ detectTapGestures {
|
|
|
+ isLanguageSheetOpen = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .height(24.dp),
|
|
|
+ horizontalArrangement = Arrangement.Start,
|
|
|
+ verticalAlignment = Alignment.CenterVertically
|
|
|
+ ) {
|
|
|
+
|
|
|
+ Surface(
|
|
|
+ modifier = Modifier.padding(start = 0.dp),
|
|
|
+ color = Color.Transparent
|
|
|
+ ) {
|
|
|
+ Image(
|
|
|
+ imageVector = icon,
|
|
|
+ contentDescription = "Select Language",
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(start = 0.dp)
|
|
|
+ .size(24.dp)
|
|
|
+ .weight(1f),
|
|
|
+ colorFilter = ColorFilter.tint(
|
|
|
+ MaterialTheme.colorScheme.primary) )
|
|
|
+ }
|
|
|
+
|
|
|
+ Surface(
|
|
|
+ modifier = Modifier.padding(start = 0.dp),
|
|
|
+ color = Color.Transparent
|
|
|
+ ) {
|
|
|
+ Text(text = text,
|
|
|
+ style = MaterialTheme.typography.titleMedium,
|
|
|
+ color = MaterialTheme.colorScheme.primary,
|
|
|
+ maxLines = 1,
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(start = 18.dp, end = 0.dp)
|
|
|
+ .weight(1f)
|
|
|
+ )
|
|
|
+ }
|
|
|
+ Spacer(modifier = Modifier.weight(1f))
|
|
|
+
|
|
|
+ Surface(
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(start = 15.dp)
|
|
|
+ .align(Alignment.CenterVertically),
|
|
|
+ color = Color.Transparent
|
|
|
+
|
|
|
+ ) {
|
|
|
+ Image(
|
|
|
+ painter = painterResource(id = R.drawable.frontarrow3x),
|
|
|
+ contentDescription = "Front_Arrow",
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(start = 0.dp, end = 0.dp)
|
|
|
+ .size(10.dp, 18.dp)
|
|
|
+ .weight(1f),
|
|
|
+ colorFilter = ColorFilter.tint(
|
|
|
+ MaterialTheme.colorScheme.primary
|
|
|
+ )
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isLanguageSheetOpen) {
|
|
|
+ ModalBottomSheet(
|
|
|
+ onDismissRequest = { isLanguageSheetOpen = false
|
|
|
+ },
|
|
|
+ sheetState = sheetState,
|
|
|
+ containerColor = MaterialTheme.colorScheme.onBackground
|
|
|
+ ) {
|
|
|
+ Box(modifier = Modifier
|
|
|
+ .background(Color.Transparent)
|
|
|
+ .fillMaxWidth()
|
|
|
+ .height(300.dp)
|
|
|
+ .padding(start = 0.dp, top = 10.dp),
|
|
|
+ ) {
|
|
|
+ Column(
|
|
|
+ verticalArrangement = Arrangement.Top,
|
|
|
+ horizontalAlignment = Alignment.Start
|
|
|
+ ) {
|
|
|
+ AddTextSettings(
|
|
|
+ text = "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)
|
|
|
+ .selectable(
|
|
|
+ selected = language == languages[0],
|
|
|
+ onClick = {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
|
+ when (language.name) {
|
|
|
+ languages[0].name -> {
|
|
|
+ context.getSystemService(LocaleManager::class.java).applicationLocales = LocaleList.forLanguageTags(language.code)
|
|
|
+ }
|
|
|
+ languages[1].name -> {
|
|
|
+ context.getSystemService(LocaleManager::class.java).applicationLocales = LocaleList.forLanguageTags(language.code)
|
|
|
+ }
|
|
|
+ languages[2].name -> {
|
|
|
+ context.getSystemService(LocaleManager::class.java).applicationLocales = LocaleList.forLanguageTags(language.code)
|
|
|
+ }
|
|
|
+ languages[3].name -> {
|
|
|
+ context.getSystemService(LocaleManager::class.java).applicationLocales = LocaleList.forLanguageTags(language.code)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ isLanguageSheetOpen = false
|
|
|
+ },
|
|
|
+ )
|
|
|
+// .indication(
|
|
|
+// indication = null,
|
|
|
+// interactionSource = remember {
|
|
|
+// MutableInteractionSource()
|
|
|
+// }
|
|
|
+// )
|
|
|
+ ,
|
|
|
+ verticalAlignment = Alignment.CenterVertically
|
|
|
+ ) {
|
|
|
+// val themeState = isSystemInDarkTheme()
|
|
|
+// val isSystemInDarkTheme by remember { mutableStateOf(themeState) }
|
|
|
+ RadioButton(selected = language == languages[0],
|
|
|
+ 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]
|
|
|
+// }
|
|
|
+ isLanguageSheetOpen = false
|
|
|
+ },
|
|
|
+ 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
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
|
|
|
@Composable
|
|
|
fun ColumnScope.AddRowSettingsSmart(
|
|
@@ -974,7 +1156,9 @@ fun ColumnScope.AddRowSettingsSmart(
|
|
|
},
|
|
|
sheetState = sheetStateAny,
|
|
|
containerColor = MaterialTheme.colorScheme.onBackground,
|
|
|
- modifier = Modifier.padding(top = 15.dp).fillMaxSize()
|
|
|
+ modifier = Modifier
|
|
|
+ .padding(top = 15.dp)
|
|
|
+ .fillMaxSize()
|
|
|
) {
|
|
|
Box(modifier = Modifier
|
|
|
.background(Color.Transparent)
|