Parcourir la source

Optimized logic for auto-connect list, adding and removing of a list

Khubaib il y a 5 mois
Parent
commit
25eb05d8fe

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

@@ -14,10 +14,10 @@
 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <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="com.android.vending.BILLING" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@@ -204,18 +204,18 @@
                 android:value="true" />
         </service>
 
-<!--        <receiver-->
-<!--            android:name=".utils.WifiScanReceiver"-->
-<!--            android:enabled="true"-->
-<!--            android:exported="true">-->
-<!--            <intent-filter>-->
-<!--                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />-->
-<!--                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />-->
-<!--                <action android:name="android.net.wifi.STATE_CHANGE" />-->
-<!--                <action android:name="android.net.wifi.SCAN_RESULTS" />-->
-<!--                <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />-->
-<!--            </intent-filter>-->
-<!--        </receiver>-->
+        <receiver
+            android:name=".utils.WifiScanReceiver"
+            android:enabled="true"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
+                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
+                <action android:name="android.net.wifi.STATE_CHANGE" />
+                <action android:name="android.net.wifi.SCAN_RESULTS" />
+                <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
+            </intent-filter>
+        </receiver>
 
 <!--        <service-->
 <!--            android:name=".fcm.NetworkJobService"-->

+ 14 - 14
app/src/main/java/com/vpn/fastestvpnservice/MainActivity.kt

@@ -53,9 +53,9 @@ import de.blinkt.openvpn.core.App
 
 open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityReceiverListener {
 
-//    lateinit var wifiManager: WifiManager
-//    lateinit var wifiScanReceiver: WifiScanReceiver
-//    lateinit var intentFilter: IntentFilter
+    lateinit var wifiManager: WifiManager
+    lateinit var wifiScanReceiver: WifiScanReceiver
+    lateinit var intentFilter: IntentFilter
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -89,13 +89,13 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
             }
         }
 
-//        ActivityCompat.requestPermissions(this,
-//            arrayOf(
-//                android.Manifest.permission.ACCESS_FINE_LOCATION,
-//                android.Manifest.permission.ACCESS_COARSE_LOCATION
-//            ),
-//            PackageManager.PERMISSION_GRANTED
-//        )
+        ActivityCompat.requestPermissions(this,
+            arrayOf(
+                android.Manifest.permission.ACCESS_FINE_LOCATION,
+                android.Manifest.permission.ACCESS_COARSE_LOCATION
+            ),
+            PackageManager.PERMISSION_GRANTED
+        )
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Settings.canDrawOverlays(this)) {
             isSwitch.value = true
@@ -105,11 +105,11 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
         WindowCompat.setDecorFitsSystemWindows(window, false)
 
 //        wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
-//        wifiScanReceiver = WifiScanReceiver()
-//        intentFilter = IntentFilter()
-//        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION)
+        wifiScanReceiver = WifiScanReceiver()
+        intentFilter = IntentFilter()
+        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION)
 //
-//        ContextCompat.registerReceiver(applicationContext, wifiScanReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
+        ContextCompat.registerReceiver(applicationContext, wifiScanReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
 
         val isLoggedIn = basePreferenceHelper.getLoggedInState()
 

+ 44 - 14
app/src/main/java/com/vpn/fastestvpnservice/customItems/AutoConnectItem.kt

@@ -21,6 +21,7 @@ import androidx.compose.material.icons.filled.Wifi
 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.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.saveable.rememberSaveable
@@ -126,7 +127,7 @@ fun AutoConnectItem(mobileNetworkState: Boolean, basePreferenceHelper: BasePrefe
 }
 
 @Composable
-fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePreferenceHelper) {
+fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePreferenceHelper, connectedWifiSsid: String) {
     Log.d("autoconnect", "AutoConnectWifiItem = ${wifiList.wifiName} ${wifiList.isAdded}")
 
     var isAddedWifi by rememberSaveable { mutableStateOf(wifiList.isAdded) }
@@ -190,7 +191,12 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
                     detectTapGestures {
                         isAddedWifi = !isAddedWifi
 
-                        onClickAutoConnect(basePreferenceHelper, isAddedWifi, wifiList)
+                        onClickAutoConnect(
+                            basePreferenceHelper,
+                            isAddedWifi,
+                            wifiList,
+                            connectedWifiSsid
+                        )
                     }
                 },
             verticalAlignment = Alignment.CenterVertically
@@ -209,7 +215,7 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
                 onClick = {
                     isAddedWifi = !isAddedWifi
 
-                    onClickAutoConnect(basePreferenceHelper, isAddedWifi, wifiList)
+                    onClickAutoConnect(basePreferenceHelper, isAddedWifi, wifiList, connectedWifiSsid)
                 }
             ) {
                 Icon(
@@ -224,33 +230,57 @@ fun AutoConnectWifiItem(wifiList: AutoConnectModel, basePreferenceHelper: BasePr
     }
 }
 
-fun onClickAutoConnect(basePreferenceHelper: BasePreferenceHelper, isAddedWifi: Boolean, wifiList: AutoConnectModel) {
+fun onClickAutoConnect(
+    basePreferenceHelper: BasePreferenceHelper,
+    isAddedWifi: Boolean,
+    wifiList: AutoConnectModel,
+    connectedWifiSsid: String
+) {
     val autoConnectWifiList = basePreferenceHelper.getAutoConnectList()
     val wifiListAdded = ArrayList<AutoConnectModel>()
+    val wifiListState = settingsViewModel.liveDataConnectedWifi.value
 
     if (!isAddedWifi) {
         Log.d("autoconnect", "isAddedWifi inside")
-        if (autoConnectWifiList != null) {
-            wifiListAdded.addAll(autoConnectWifiList)
+        if (wifiListState != null) {
+            wifiListAdded.addAll(wifiListState)
+        }
+
+        if (wifiList.wifiName != connectedWifiSsid) {
             wifiListAdded.remove(wifiList)
+        } else {
+            wifiListAdded.forEachIndexed { index, autoConnectModel ->
+                if (autoConnectModel.wifiName == wifiList.wifiName) {
+                    wifiListAdded.set(
+                        index,
+                        AutoConnectModel(wifiList.wifiName, isAddedWifi)
+                    )
+                }
+            }
         }
+
     }
     else {
         Log.d("autoconnect", "isAddedWifi else")
-        if (autoConnectWifiList != null) {
-            wifiListAdded.addAll(autoConnectWifiList)
-            wifiListAdded.add(
-                0,
-                AutoConnectModel(wifiList.wifiName, isAddedWifi)
-            )
+        if (wifiListState != null) {
+            wifiListAdded.addAll(wifiListState)
+
+            wifiListAdded.forEachIndexed { index, autoConnectModel ->
+                if (autoConnectModel.wifiName == wifiList.wifiName) {
+                    wifiListAdded.set(
+                        index,
+                        AutoConnectModel(wifiList.wifiName, isAddedWifi)
+                    )
+                }
+            }
         }
         else {
-            wifiListAdded.add(AutoConnectModel(wifiList.wifiName, isAddedWifi))
+            wifiListAdded.set(0, AutoConnectModel(wifiList.wifiName, isAddedWifi))
         }
     }
 
     Log.d("autoconnect", "wifiListAdded = ${wifiListAdded.size}")
 
     basePreferenceHelper.setAutoConnectList(wifiListAdded)
-//    settingsViewModel.mutableLiveDataConnectedWifi.value = wifiListAdded
+    settingsViewModel.mutableLiveDataConnectedWifi.value = wifiListAdded
 }

+ 10 - 15
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -137,6 +137,8 @@ import java.util.Locale
 var isSwitch: MutableState<Boolean> = mutableStateOf(false)
 lateinit var settingsViewModel: SettingsViewModel
 
+val isSettingsViewModel get() = ::settingsViewModel.isInitialized
+
 @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
 @Composable
 fun Settings(navHostController: NavHostController, activity: ComponentActivity) {
@@ -203,13 +205,6 @@ fun Settings(navHostController: NavHostController, activity: ComponentActivity)
                     icon = R.drawable.vpn_protocols3x,
                     text = context.getString(R.string.vpn_protocols)
                 )
-                /* Commenting so far ...*/
-
-
-//                AddRowSwitch(
-//                    icon = R.drawable.autoconnect3x,
-//                    text = "Auto Connect"
-//                )
 
                 AddRowSettingsSmart(
                     icon = R.drawable.smart_connect3x,
@@ -262,14 +257,14 @@ fun Settings(navHostController: NavHostController, activity: ComponentActivity)
                     settingsString = it
                 }
 
-//                AddRowSettings(
-//                    icon = R.drawable.autoconnect3x,
-//                    text = "Auto Connect",
-//                    onClick = {
-//                        settingsViewModel.getConnectedWifi()
-//                        navHostController.navigate(Screen.AutoConnect.route)
-//                    }
-//                )
+                AddRowSettings(
+                    icon = R.drawable.autoconnect3x,
+                    text = "Auto Connect",
+                    onClick = {
+                        settingsViewModel.getConnectedWifi()
+                        navHostController.navigate(Screen.AutoConnect.route)
+                    }
+                )
 
                 if (isLaunched) {
                     AlertDialog(

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

@@ -60,6 +60,8 @@ fun AutoConnectScreen(navHostController: NavHostController) {
     var isAddedWifi by rememberSaveable { mutableStateOf(false) }
 
     val wifiList = settingsViewModel.liveDataConnectedWifi.observeAsState().value
+    val connectedWifiSsid = settingsViewModel.liveDataConnectedSsid.observeAsState().value
+
     Log.d("autoconnect", "wifiList ACS = ${wifiList.toString()}")
 
     Box(
@@ -176,7 +178,7 @@ fun AutoConnectScreen(navHostController: NavHostController) {
             wifiList?.let {
                 LazyColumn() {
                     items(items = wifiList) {
-                        AutoConnectWifiItem(it, basePreferenceHelper)
+                        AutoConnectWifiItem(it, basePreferenceHelper, connectedWifiSsid ?: "")
                     }
                 }
             }

+ 14 - 3
app/src/main/java/com/vpn/fastestvpnservice/utils/WifiScanReceiver.java

@@ -16,6 +16,8 @@ import androidx.core.app.NotificationCompat;
 import com.vpn.fastestvpnservice.MainActivity;
 import com.vpn.fastestvpnservice.R;
 import com.vpn.fastestvpnservice.fcm.NetworkJobService;
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.SettingsScreenKt;
+import com.vpn.fastestvpnservice.viewmodels.SettingsViewModel;
 
 import de.blinkt.openvpn.core.App;
 
@@ -27,15 +29,24 @@ public class WifiScanReceiver extends BroadcastReceiver {
     public void onReceive(Context context, Intent intent) {
         this.context = context;
 
-        Log.d("open_wifi_rec", "WifiScanReceiver");
+        Log.d("WifiScanReceiver", "WifiScanReceiver");
 
         String action = intent.getAction();
 
         if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
 
-            Log.d("open_wifi_rec in", "Inside");
+            Log.d("WifiScanReceiver in", "Inside");
 
-            NetworkJobService.scheduleJob(context); // now commenting, will use later...
+            if (SettingsScreenKt.isSettingsViewModel()) {
+                Log.d("WifiScanReceiver in", "Yes");
+            } else {
+                Log.d("WifiScanReceiver in", "No");
+                SettingsScreenKt.settingsViewModel = new SettingsViewModel(context);
+            }
+
+            SettingsScreenKt.settingsViewModel.getConnectedWifi();
+
+//            NetworkJobService.scheduleJob(context); // now commenting, will use later...
 
         }
     }

+ 6 - 1
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/SettingsViewModel.kt

@@ -22,6 +22,9 @@ class SettingsViewModel constructor(context: Context): ViewModel() {
     var mutableLiveDataConnectedWifi = MutableLiveData<ArrayList<AutoConnectModel>>()
     var liveDataConnectedWifi: LiveData<ArrayList<AutoConnectModel>> = mutableLiveDataConnectedWifi
 
+    var mutableLiveDataConnectedSsid = MutableLiveData<String>()
+    var liveDataConnectedSsid: LiveData<String> = mutableLiveDataConnectedSsid
+
     var context: Context
     var basePreferenceHelper: BasePreferenceHelper
 
@@ -66,6 +69,8 @@ class SettingsViewModel constructor(context: Context): ViewModel() {
             if (activeNetwork != null && activeNetwork.isConnected && activeNetwork.type == ConnectivityManager.TYPE_WIFI) {
                 val wifiInfo = wifiManager.connectionInfo
 
+                Log.d("getConnectedWifi", "activeNetwork = $activeNetwork")
+
                 if (wifiInfo != null && wifiInfo.supplicantState == SupplicantState.COMPLETED) {
                     val connectedWifiSsid = wifiInfo.ssid.replace("\"", "")
 
@@ -97,7 +102,7 @@ class SettingsViewModel constructor(context: Context): ViewModel() {
                     Log.d("autoconnect", "wifiList = ${wifiList.toString()}")
 
                     mutableLiveDataConnectedWifi.value = wifiList
-
+                    mutableLiveDataConnectedSsid.value = connectedWifiSsid
                 }
             }
         }