Parcourir la source

Integrated vpn connection on autoconnect, connect vpn if untrusted wifi is connected and disconnect if trusted wifi is connected

Khubaib il y a 4 mois
Parent
commit
cbbdd566e2

+ 55 - 5
app/src/main/java/com/vpn/fastestvpnservice/customItems/AutoConnectItem.kt

@@ -22,8 +22,10 @@ import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
@@ -35,10 +37,15 @@ import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.AutoConnectModel
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.homeViewModel1
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.settingsViewModel
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.vpnConnectionsUtil
+import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
+import de.blinkt.openvpn.core.App
 
 @Composable
 fun AutoConnectItem(mobileNetworkState: Boolean, basePreferenceHelper: BasePreferenceHelper) {
@@ -127,10 +134,19 @@ fun AutoConnectItem(mobileNetworkState: Boolean, basePreferenceHelper: BasePrefe
 }
 
 @Composable
-fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePreferenceHelper, connectedWifiSsid: String) {
+fun AutoConnectWifiItem(
+    wifiList: AutoConnectModel,
+    basePreferenceHelper: BasePreferenceHelper,
+    connectedWifiSsid: String,
+    context: Context
+) {
     Log.d("autoconnect", "AutoConnectWifiItem = ${wifiList.wifiName} ${wifiList.isAdded}")
 
     var isAddedWifi by rememberSaveable { mutableStateOf(wifiList.isAdded) }
+    val scope = rememberCoroutineScope()
+    val homeViewModel: HomeViewModel = viewModel{
+        HomeViewModel(context, scope)
+    }
 
     Surface(
         modifier = Modifier
@@ -182,6 +198,14 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
         val isAddedText = if (isAddedWifi) "Remove" else "Add"
         val isAddedColor = if (isAddedWifi) colorResource(id = R.color.Red) else colorResource(id = R.color.LightSeaGreen)
 
+//        val isConnect by rememberSaveable { mutableIntStateOf(0) }
+//         homeViewModel.isConnect.observeAsState().value?.let {
+//             isConnect = it
+//             homeViewModel._isConnect.value = null
+//        }
+//        isConnect = basePreferenceHelper.getConnectState()
+//        Log.d("autoconnect_state", "isConnect = $isConnect Before")
+
         Row(
             modifier = Modifier
                 .padding(bottom = 0.dp, end = 0.dp)
@@ -195,7 +219,8 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
                             basePreferenceHelper,
                             isAddedWifi,
                             wifiList,
-                            connectedWifiSsid
+                            connectedWifiSsid,
+                            homeViewModel,
                         )
                     }
                 },
@@ -215,7 +240,13 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
                 onClick = {
                     isAddedWifi = !isAddedWifi
 
-                    onClickAutoConnect(basePreferenceHelper, isAddedWifi, wifiList, connectedWifiSsid)
+                    onClickAutoConnect(
+                        basePreferenceHelper,
+                        isAddedWifi,
+                        wifiList,
+                        connectedWifiSsid,
+                        homeViewModel,
+                    )
                 }
             ) {
                 Icon(
@@ -234,7 +265,8 @@ fun onClickAutoConnect(
     basePreferenceHelper: BasePreferenceHelper,
     isAddedWifi: Boolean,
     wifiList: AutoConnectModel,
-    connectedWifiSsid: String
+    connectedWifiSsid: String,
+    homeViewModel: HomeViewModel,
 ) {
     val wifiListAdded = ArrayList<AutoConnectModel>()
     val wifiListRemove = ArrayList<AutoConnectModel>()
@@ -293,7 +325,25 @@ fun onClickAutoConnect(
 
     Log.d("autoconnect_state", "wifiListAdded = ${wifiListAdded.toString()}")
     Log.d("autoconnect_state", "wifiListRemove = ${wifiListRemove.toString()}")
-    Log.d("autoconnect_state", "wifiListState = ${wifiListState.toString()}")
+
+    val isTrustedWifiConnected = wifiListAdded.any { it.wifiName == connectedWifiSsid && it.isAdded }
+
+    val isConnect = homeViewModel1.isConnect.value
+
+    Log.d("autoconnect_state", "isConnect = $isConnect $isTrustedWifiConnected")
+
+    if (isTrustedWifiConnected && isConnect == App.CONNECTED) {
+        Log.d("autoconnect_state", "Disconnect VPN")
+        vpnConnectionsUtil.stopVpn()
+    }
+    else if (!isTrustedWifiConnected && isConnect == App.DISCONNECTED) {
+        Log.d("autoconnect_state", "Connect VPN")
+        vpnConnectionsUtil.startVpn()
+    }
+    else if (isTrustedWifiConnected && isConnect == App.CONNECTING) {
+        Log.d("autoconnect_state", "Connecting VPN")
+        vpnConnectionsUtil.stopVpn()
+    }
 
     settingsViewModel.mutableLiveDataConnectedWifi.value = wifiListAdded
 }

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

@@ -178,7 +178,7 @@ fun AutoConnectScreen(navHostController: NavHostController) {
             wifiList?.let {
                 LazyColumn() {
                     items(items = wifiList) {
-                        AutoConnectWifiItem(it, basePreferenceHelper, connectedWifiSsid ?: "")
+                        AutoConnectWifiItem(it, basePreferenceHelper, connectedWifiSsid ?: "", context)
                     }
                 }
             }