浏览代码

Displaying connected wifi on auto connect screen on android

Khubaib 6 月之前
父节点
当前提交
7fe210dd60

+ 4 - 4
app/src/main/AndroidManifest.xml

@@ -14,10 +14,10 @@
 
 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.INTERNET" />
-<!--    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />-->
-<!--    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />-->
-<!--    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
-<!--    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     <uses-permission android:name="com.android.vending.BILLING" />
     <uses-permission android:name="com.android.vending.BILLING" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

+ 8 - 7
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -127,6 +127,7 @@ import com.vpn.fastestvpnservice.ui.theme.customTypography
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
 import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
 import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
 import com.vpn.fastestvpnservice.viewmodels.ServerListViewModel
+import com.vpn.fastestvpnservice.viewmodels.SettingsViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
 import com.vpn.fastestvpnservice.viewmodels.SplashViewModel
 import de.blinkt.openvpn.core.App
 import de.blinkt.openvpn.core.App
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.delay
@@ -257,13 +258,13 @@ fun Settings(navHostController: NavHostController, activity: ComponentActivity)
                     settingsString = it
                     settingsString = it
                 }
                 }
 
 
-//                AddRowSettings(
-//                    icon = R.drawable.autoconnect3x,
-//                    text = "Auto Connect",
-//                    onClick = {
-//                        navHostController.navigate(Screen.AutoConnect.route)
-//                    }
-//                )
+                AddRowSettings(
+                    icon = R.drawable.autoconnect3x,
+                    text = "Auto Connect",
+                    onClick = {
+                        navHostController.navigate(Screen.AutoConnect.route)
+                    }
+                )
 
 
                 if (isLaunched) {
                 if (isLaunched) {
                     AlertDialog(
                     AlertDialog(

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

@@ -34,8 +34,10 @@ import androidx.compose.material.icons.filled.NetworkCell
 import androidx.compose.material.icons.filled.Wifi
 import androidx.compose.material.icons.filled.Wifi
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.saveable.rememberSaveable
@@ -55,6 +57,7 @@ import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.dp
+import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import androidx.navigation.NavHostController
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.toChangeServer
 import com.vpn.fastestvpnservice.beans.toChangeServer
@@ -65,6 +68,7 @@ import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
 import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.screens.serverListViewModelSplash
 import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.utils.Utils
 import com.vpn.fastestvpnservice.utils.Utils
+import com.vpn.fastestvpnservice.viewmodels.SettingsViewModel
 
 
 var selectedSmart: MutableState<String> = mutableStateOf("")
 var selectedSmart: MutableState<String> = mutableStateOf("")
 
 
@@ -75,6 +79,15 @@ fun AutoConnectScreen(navHostController: NavHostController) {
     selectedSmart.value = basePreferenceHelper.getSmartList()
     selectedSmart.value = basePreferenceHelper.getSmartList()
     var isAdded by rememberSaveable { mutableStateOf(false) }
     var isAdded by rememberSaveable { mutableStateOf(false) }
     var isAddedWifi by rememberSaveable { mutableStateOf(false) }
     var isAddedWifi by rememberSaveable { mutableStateOf(false) }
+    val settingsViewModel = viewModel() {
+        SettingsViewModel(context = context)
+    }
+
+    LaunchedEffect(key1 = Unit) {
+        settingsViewModel.getConnectedWifi()
+    }
+
+    val connectedWifiSsid = settingsViewModel.liveDataConnectedWifi.observeAsState().value
 
 
     Box(
     Box(
         modifier = Modifier
         modifier = Modifier
@@ -299,7 +312,7 @@ fun AutoConnectScreen(navHostController: NavHostController) {
                     color = Color.Transparent
                     color = Color.Transparent
                 ) {
                 ) {
                     Text(
                     Text(
-                        text = "Wifi",
+                        text = connectedWifiSsid ?: "",
                         style = MaterialTheme.typography.labelMedium,
                         style = MaterialTheme.typography.labelMedium,
                         color = colorResource(id = R.color.gray_icon),
                         color = colorResource(id = R.color.gray_icon),
                         maxLines = 1,
                         maxLines = 1,

+ 97 - 0
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/SettingsViewModel.kt

@@ -0,0 +1,97 @@
+package com.vpn.fastestvpnservice.viewmodels
+
+import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
+import android.net.ConnectivityManager
+import android.net.wifi.ScanResult
+import android.net.wifi.SupplicantState
+import android.net.wifi.WifiManager
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import de.blinkt.openvpn.core.App
+
+class SettingsViewModel constructor(context: Context): ViewModel() {
+
+    var mutableLiveDataConnectedWifi = MutableLiveData<String>("")
+    var liveDataConnectedWifi: LiveData<String> = mutableLiveDataConnectedWifi
+
+    var context: Context
+
+    init {
+        this.context = context
+    }
+
+    fun getConnectedWifi() {
+        val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
+
+        if (ActivityCompat.checkSelfPermission(
+                context,
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED ||
+            ActivityCompat.checkSelfPermission(
+                context,
+                Manifest.permission.ACCESS_COARSE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            return
+        }
+
+        val scanResults: List<ScanResult> = wifiManager.scanResults
+        Log.d("getConnectedWifi", "Job scanResults + " + scanResults.size)
+
+        val nonZeroList: MutableList<ScanResult> = ArrayList()
+
+        if (scanResults.isNotEmpty()) {
+            Log.d("getConnectedWifi 1", scanResults.size.toString() + "")
+            nonZeroList.addAll(scanResults)
+        } else {
+            Log.d("getConnectedWifi 2", "else - nonZeroList")
+        }
+
+        if (wifiManager.isWifiEnabled) {
+            Log.d("getConnectedWifi", "isWifiEnabled")
+            val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+
+            val activeNetwork = connectivityManager.activeNetworkInfo
+
+            if (activeNetwork != null && activeNetwork.isConnected && activeNetwork.type == ConnectivityManager.TYPE_WIFI) {
+                val wifiInfo = wifiManager.connectionInfo
+
+                if (wifiInfo != null && wifiInfo.supplicantState == SupplicantState.COMPLETED) {
+                    val connectedSSID = wifiInfo.ssid.replace("\"", "")
+
+                    Log.d("getConnectedWifi cssid", connectedSSID)
+
+                    mutableLiveDataConnectedWifi.value = connectedSSID
+
+//                    for (scanResult in nonZeroList) {
+//
+////                        Log.d("getConnectedWifi list", scanResult.SSID);
+//
+//                        val ssid = scanResult.SSID;
+//
+//                        if (scanResult.capabilities != null) {
+//
+//                                val targetSSID = ssid;
+//                                Log.d("getConnectedWifi Conn", "Normal wifi connected " + connectedSSID);
+//
+//                                if (connectedSSID.equals(targetSSID)) {
+//                                    Log.d("getConnectedWifi con1", "Device is connected to the open Wi-Fi network: " + connectedSSID);
+//                                    return;
+//                                } else {
+//                                    Log.d("getConnectedWifi con2", "Device is connected to the Normal Wi-Fi network: " + connectedSSID);
+//                                }
+//                            }
+//
+//                    }
+                }
+            }
+        }
+
+    }
+}