Parcourir la source

Added switch for auto connect state on auto-connect screen

Khubaib il y a 4 mois
Parent
commit
c90c694c9f

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

@@ -65,6 +65,7 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         removePreference(context, KEY_FILENAME, KEY_RECENTLY_SERVERS_ID)
         removePreference(context, KEY_FILENAME, KEY_AUTOCONNECT)
         removePreference(context, KEY_FILENAME, KEY_MOBILENETWORK)
+        removePreference(context, KEY_FILENAME, KEY_AUTOCONNECT_STATE)
     }
 
     fun clearServerObject() {
@@ -600,6 +601,14 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         return getBooleanPreference(context, KEY_FILENAME, KEY_LAUNCH)
     }
 
+    fun saveAutoConnectState(status: Boolean) {
+        putBooleanPreference(context, KEY_FILENAME, KEY_AUTOCONNECT_STATE, status)
+    }
+
+    fun getAutoConnectState(): Boolean {
+        return getBooleanPreference(context, KEY_FILENAME, KEY_AUTOCONNECT_STATE)
+    }
+
     fun saveFcmToken(token: String) {
         putStringPreference(context, KEY_FILENAME, KEY_FCM, token)
     }
@@ -715,5 +724,6 @@ class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
         private const val KEY_RECENTLY_SERVERS_ID = "keydata_recently_servers_id"
         private const val KEY_AUTOCONNECT = "keydata_autoconnect"
         private const val KEY_MOBILENETWORK = "keydata_mobilenetwork"
+        private const val KEY_AUTOCONNECT_STATE = "keydata_autoconnect_state"
     }
 }

+ 142 - 79
app/src/main/java/com/vpn/fastestvpnservice/screens/settingsScreenAll/AutoConnectScreen.kt

@@ -1,14 +1,19 @@
 package com.vpn.fastestvpnservice.screens.settingsScreenAll
 
 import android.app.Activity
+import android.os.Build
+import android.provider.Settings
 import android.util.Log
 import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 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.Row
+import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
@@ -24,6 +29,8 @@ import androidx.compose.material.IconButton
 import androidx.compose.material.Surface
 import androidx.compose.material.Text
 import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Switch
+import androidx.compose.material3.SwitchDefaults
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.getValue
@@ -34,7 +41,9 @@ import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
+import androidx.compose.ui.draw.scale
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalView
@@ -58,6 +67,7 @@ fun AutoConnectScreen(navHostController: NavHostController) {
     selectedSmart.value = basePreferenceHelper.getSmartList()
     var isAdded by rememberSaveable { mutableStateOf(false) }
     var isAddedWifi by rememberSaveable { mutableStateOf(false) }
+    var isSwitch by rememberSaveable { mutableStateOf(basePreferenceHelper.getAutoConnectState()) }
 
     val wifiList = settingsViewModel.liveDataConnectedWifi.observeAsState().value
     val connectedWifiSsid = settingsViewModel.liveDataConnectedSsid.observeAsState().value
@@ -78,107 +88,160 @@ fun AutoConnectScreen(navHostController: NavHostController) {
 
         HeaderRowACS(navHostController = navHostController, basePreferenceHelper)
 
-        Column(
-            verticalArrangement = Arrangement.Top,
-            horizontalAlignment = Alignment.Start,
+        Row(
             modifier = Modifier
-                .padding(top = 120.dp, start = 16.dp, end = 0.dp)
-                .fillMaxSize()
+                .fillMaxWidth()
+                .padding(top = 120.dp, end = 27.dp)
                 .background(Color.Transparent)
+                .height(30.dp),
+            horizontalArrangement = Arrangement.Start,
+            verticalAlignment = Alignment.CenterVertically
         ) {
-            Text(
-                text = context.getString(R.string.preferred_location),
-                color = MaterialTheme.colorScheme.primary,
-                style = MaterialTheme.typography.titleSmall,
-                modifier = Modifier
-                    .padding(end = 27.dp)
-            )
+            Surface(
+                modifier = Modifier.padding(start = 0.dp),
+                color = Color.Transparent
+            ) {
+                Text(text = "Enable Auto-connect",
+                    style = MaterialTheme.typography.titleSmall,
+                    color = MaterialTheme.colorScheme.primary,
+                    maxLines = 1,
+                    modifier = Modifier
+                        .padding(start = 16.dp, end = 0.dp)
+                        .weight(1f)
+                )
+            }
 
-            Text(
-                text = context.getString(R.string.auto_connect_location),
-                color = colorResource(id = R.color.gray_icon),
-                style = MaterialTheme.typography.displaySmall,
+            Spacer(modifier = Modifier.weight(1f))
+
+            Surface(
                 modifier = Modifier
-                    .padding(top = 5.dp, end = 27.dp)
-                    .alpha(1f)
-            )
+                    .padding(start = 0.dp, end = 0.dp)
+                    .align(Alignment.CenterVertically),
+                color = Color.Transparent
+            ) {
 
-            AddRowSettingsSmart(
-                icon = R.drawable.smart_connect3x,
-                text = selectedSmart.value,
-                isRowShown = true,
-                isSheetShown = false,
-                navHostController = navHostController,
-                topPadding = 20.dp
-            )
+                Switch(
+                    checked = isSwitch,
+                    onCheckedChange = { state ->
+                        isSwitch = state
+                        basePreferenceHelper.saveAutoConnectState(isSwitch)
+                    },
+                    modifier = Modifier.scale(0.8F),
+                    colors = SwitchDefaults.colors(
+                        checkedThumbColor = Color.White,
+                        checkedTrackColor = MaterialTheme.colorScheme.surfaceContainerLowest,
+                        uncheckedThumbColor = MaterialTheme.colorScheme.onSecondaryContainer,
+                        uncheckedTrackColor = MaterialTheme.colorScheme.surfaceContainerHighest,
+                        uncheckedBorderColor = MaterialTheme.colorScheme.surfaceContainerHighest
+                    ),
+                    thumbContent = {}
+                )
+            }
+        }
 
-            Box(
+        if (isSwitch) {
+            Column(
+                verticalArrangement = Arrangement.Top,
+                horizontalAlignment = Alignment.Start,
                 modifier = Modifier
-                    .wrapContentHeight()
-                    .fillMaxWidth()
-                    .padding(top = 20.dp, end = 27.dp)
-                    .border(
-                        border = BorderStroke(1.dp, colorResource(id = R.color.graywidget)),
-                        shape = RoundedCornerShape(14.dp)
-                    )
-                    .background(
-                        shape = RoundedCornerShape(14.dp),
-                        color = MaterialTheme.colorScheme.onBackground
-                    )
+                    .padding(top = 170.dp, start = 16.dp, end = 0.dp)
+                    .fillMaxSize()
+                    .background(Color.Transparent)
             ) {
                 Text(
-                    text = context.getString(R.string.auto_connect_functionality),
+                    text = context.getString(R.string.preferred_location),
+                    color = MaterialTheme.colorScheme.primary,
+                    style = MaterialTheme.typography.titleSmall,
+                    modifier = Modifier
+                        .padding(end = 27.dp)
+                )
+
+                Text(
+                    text = context.getString(R.string.auto_connect_location),
                     color = colorResource(id = R.color.gray_icon),
                     style = MaterialTheme.typography.displaySmall,
                     modifier = Modifier
-                        .padding(all = 10.dp)
+                        .padding(top = 5.dp, end = 27.dp)
                         .alpha(1f)
                 )
-            }
 
-            Surface(
-                modifier = Modifier
-                    .padding(top = 20.dp, end = 27.dp)
-                    .height(1.dp)
-                    .fillMaxWidth()
-                    .alpha(0.5F),
-                color = colorResource(id = R.color.gray_icon)
-            ) {}
-
-            Text(
-                text = context.getString(R.string.trusted_network),
-                color = MaterialTheme.colorScheme.primary,
-                style = MaterialTheme.typography.titleSmall,
-                modifier = Modifier.padding(top = 20.dp)
-            )
+                AddRowSettingsSmart(
+                    icon = R.drawable.smart_connect3x,
+                    text = selectedSmart.value,
+                    isRowShown = true,
+                    isSheetShown = false,
+                    navHostController = navHostController,
+                    topPadding = 20.dp
+                )
 
-            Text(
-                text = context.getString(R.string.trusted_network_disconnected),
-                color = colorResource(id = R.color.gray_icon),
-                style = MaterialTheme.typography.displaySmall,
-                modifier = Modifier
-                    .padding(top = 15.dp, end = 27.dp)
-                    .alpha(1f)
-            )
+                Box(
+                    modifier = Modifier
+                        .wrapContentHeight()
+                        .fillMaxWidth()
+                        .padding(top = 20.dp, end = 27.dp)
+                        .border(
+                            border = BorderStroke(1.dp, colorResource(id = R.color.graywidget)),
+                            shape = RoundedCornerShape(14.dp)
+                        )
+                        .background(
+                            shape = RoundedCornerShape(14.dp),
+                            color = MaterialTheme.colorScheme.onBackground
+                        )
+                ) {
+                    Text(
+                        text = context.getString(R.string.auto_connect_functionality),
+                        color = colorResource(id = R.color.gray_icon),
+                        style = MaterialTheme.typography.displaySmall,
+                        modifier = Modifier
+                            .padding(all = 10.dp)
+                            .alpha(1f)
+                    )
+                }
 
-            Text(
-                text = context.getString(R.string.trusted_network_reconnected),
-                color = colorResource(id = R.color.gray_icon),
-                style = MaterialTheme.typography.displaySmall,
-                modifier = Modifier
-                    .padding(top = 5.dp, end = 27.dp)
-                    .alpha(1f)
-            )
+                Surface(
+                    modifier = Modifier
+                        .padding(top = 20.dp, end = 27.dp)
+                        .height(1.dp)
+                        .fillMaxWidth()
+                        .alpha(0.5F),
+                    color = colorResource(id = R.color.gray_icon)
+                ) {}
+
+                Text(
+                    text = context.getString(R.string.trusted_network),
+                    color = MaterialTheme.colorScheme.primary,
+                    style = MaterialTheme.typography.titleSmall,
+                    modifier = Modifier.padding(top = 20.dp)
+                )
+
+                Text(
+                    text = context.getString(R.string.trusted_network_disconnected),
+                    color = colorResource(id = R.color.gray_icon),
+                    style = MaterialTheme.typography.displaySmall,
+                    modifier = Modifier
+                        .padding(top = 15.dp, end = 27.dp)
+                        .alpha(1f)
+                )
+
+                Text(
+                    text = context.getString(R.string.trusted_network_reconnected),
+                    color = colorResource(id = R.color.gray_icon),
+                    style = MaterialTheme.typography.displaySmall,
+                    modifier = Modifier
+                        .padding(top = 5.dp, end = 27.dp)
+                        .alpha(1f)
+                )
 
-            val mobileNetworkState = basePreferenceHelper.getMobileNetworkState()
+                val mobileNetworkState = basePreferenceHelper.getMobileNetworkState()
 
-            AutoConnectItem(mobileNetworkState, basePreferenceHelper)
+                AutoConnectItem(mobileNetworkState, basePreferenceHelper)
 
 
-            wifiList?.let {
-                LazyColumn() {
-                    items(items = wifiList) {
-                        AutoConnectWifiItem(it, basePreferenceHelper, connectedWifiSsid ?: "", context)
+                wifiList?.let {
+                    LazyColumn {
+                        items(items = wifiList) {
+                            AutoConnectWifiItem(it, basePreferenceHelper, connectedWifiSsid ?: "", context)
+                        }
                     }
                 }
             }