Browse Source

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

Khubaib 11 tháng trước cách đây
mục cha
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)
                     }
                 }
             }