Parcourir la source

Auto connected working fine even on background, app is closed, Allow all the time location permission should be enabled

Khubaib il y a 4 mois
Parent
commit
763cebbe11

+ 1 - 1
.idea/deploymentTargetSelector.xml

@@ -4,7 +4,7 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-10-15T11:21:45.517059827Z">
+        <DropdownSelection timestamp="2024-10-17T12:26:20.989073229Z">
           <Target type="DEFAULT_BOOT">
             <handle>
               <DeviceId pluginId="PhysicalDevice" identifier="serial=1C051FDF60048Z" />

+ 11 - 0
.idea/other.xml

@@ -260,6 +260,17 @@
           <option name="screenY" value="2176" />
         </PersistentDeviceSelectionData>
         <PersistentDeviceSelectionData>
+          <option name="api" value="34" />
+          <option name="brand" value="samsung" />
+          <option name="codename" value="q6q" />
+          <option name="id" value="q6q" />
+          <option name="manufacturer" value="Samsung" />
+          <option name="name" value="SM-F956B" />
+          <option name="screenDensity" value="420" />
+          <option name="screenX" value="1856" />
+          <option name="screenY" value="2160" />
+        </PersistentDeviceSelectionData>
+        <PersistentDeviceSelectionData>
           <option name="api" value="30" />
           <option name="brand" value="google" />
           <option name="codename" value="r11" />

+ 5 - 6
app/src/main/AndroidManifest.xml

@@ -22,9 +22,8 @@
     <uses-permission android:name="com.android.vending.BILLING" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
-<!--    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />-->
-<!--    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
-<!--    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
     <uses-permission android:name="android.webkit.PermissionRequest" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@@ -223,9 +222,9 @@
             android:exported="true"
             android:foregroundServiceType="specialUse" />
 
-<!--        <service-->
-<!--            android:name=".fcm.NetworkJobService"-->
-<!--            android:permission="android.permission.BIND_JOB_SERVICE" />-->
+        <service
+            android:name=".fcm.NetworkJobService"
+            android:permission="android.permission.BIND_JOB_SERVICE" />
 
     </application>
 

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

@@ -159,7 +159,7 @@ fun AutoConnectWifiItem(
 ) {
     Log.d("autoconnect", "AutoConnectWifiItem = ${wifiList.wifiName} ${wifiList.isAdded}")
 
-    var isAddedWifi by rememberSaveable { mutableStateOf(wifiList.isAdded) }
+    var isAddedWifi by remember { mutableStateOf(wifiList.isAdded) }
     val scope = rememberCoroutineScope()
     val homeViewModel: HomeViewModel = viewModel{
         HomeViewModel(context, scope)
@@ -203,7 +203,7 @@ fun AutoConnectWifiItem(
             color = Color.Transparent
         ) {
             Text(
-                text = wifiList.wifiName ?: "",
+                text = wifiList.wifiName + " " + isAddedWifi,
                 style = MaterialTheme.typography.labelMedium,
                 color = colorResource(id = R.color.gray_icon),
                 maxLines = 1,

+ 106 - 10
app/src/main/java/com/vpn/fastestvpnservice/fcm/NetworkJobService.java

@@ -27,6 +27,9 @@ import androidx.core.app.NotificationCompat;
 
 import com.vpn.fastestvpnservice.MainActivity;
 import com.vpn.fastestvpnservice.R;
+import com.vpn.fastestvpnservice.beans.AutoConnectModel;
+import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Timer;
@@ -51,21 +54,114 @@ public class NetworkJobService extends JobService {
 
 //        handleScanResults(jobParameters);
 
-        timer = new Timer();
-        timer.scheduleAtFixedRate(new TimerTask() {
-            @Override
-            public void run() {
-                Log.d("NetworkJobService", "Job handleScanResults");
+        getConnectedWifiService();
 
-                handleScanResults(jobParameters);
-            }
-        }, 10000, WIFI_SCAN_INTERVAL);
+//        timer = new Timer();
+//        timer.scheduleAtFixedRate(new TimerTask() {
+//            @Override
+//            public void run() {
+//                Log.d("NetworkJobService", "Job handleScanResults");
+//
+//                handleScanResults(jobParameters);
+//            }
+//        }, 10000, WIFI_SCAN_INTERVAL);
 
 //        jobFinished(jobParameters, false);
 
         return true;
     }
 
+    public void getConnectedWifiService() {
+
+        Log.d("NetworkJobService", "Started getConnectedWifiService()");
+
+        if (ActivityCompat.checkSelfPermission(
+                getBaseContext(),
+                Manifest.permission.ACCESS_FINE_LOCATION
+        ) != PackageManager.PERMISSION_GRANTED ||
+                ActivityCompat.checkSelfPermission(
+                        getBaseContext(),
+                        Manifest.permission.ACCESS_COARSE_LOCATION
+                ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            return;
+        }
+
+        // currently commenting below ...
+
+        BasePreferenceHelper basePreferenceHelper = new BasePreferenceHelper(getBaseContext());
+        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+        List<ScanResult> scanResults = wifiManager.getScanResults();
+        Log.d("NetworkJobService", "Job scanResults + " + scanResults.size());
+
+        List<ScanResult> nonZeroList = new ArrayList<>();
+
+        if (!scanResults.isEmpty()) {
+            Log.d("NetworkJobService 1", scanResults.size() + "");
+            nonZeroList.addAll(scanResults);
+        }
+        else {
+            Log.d("NetworkJobService 2", WiFiMonitorService.scanResultsStatic.size() + "");
+        }
+
+        Log.d("NetworkJobService in", "Inside");
+
+//        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+
+        if (wifiManager.isWifiEnabled()) {
+            Log.d("NetworkJobService", "isWifiEnabled");
+            ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+
+            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
+
+            if (activeNetwork != null && activeNetwork.isConnected() && activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
+                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+
+                Log.d("NetworkJobService", "activeNetwork = " + activeNetwork);
+
+                if (wifiInfo != null && wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
+                    String connectedWifiSsid = wifiInfo.getSSID().replace("\"", "");
+
+                    Log.d("NetworkJobService cssid", connectedWifiSsid);
+
+                    List<AutoConnectModel> autoConnectWifiList = basePreferenceHelper.getAutoConnectList();
+                    List<AutoConnectModel> wifiList = new ArrayList<>();
+
+                    Log.d("NetworkJobService", "connectedWifiSsid = " + connectedWifiSsid);
+                    Log.d("NetworkJobService", "Before autoConnectWifiList = " + (autoConnectWifiList != null ? autoConnectWifiList.size() : 0));
+
+                    if (autoConnectWifiList != null && !autoConnectWifiList.isEmpty()) {
+                        wifiList.addAll(autoConnectWifiList);
+
+                        boolean isConnectedSsidInList = false;
+                        for (AutoConnectModel model : wifiList) {
+                            if (model.getWifiName().equals(connectedWifiSsid)) {
+                                isConnectedSsidInList = true;
+                                break;
+                            }
+                        }
+
+                        if (!isConnectedSsidInList && !connectedWifiSsid.isEmpty()) {
+                            wifiList.add(0, new AutoConnectModel(connectedWifiSsid, false));
+                        }
+                    } else {
+                        if (!connectedWifiSsid.isEmpty()) {
+                            wifiList.add(new AutoConnectModel(connectedWifiSsid, false));
+                        }
+                    }
+
+                    Log.d("NetworkJobService", "wifiList = " + wifiList.size());
+                    Log.d("NetworkJobService", "wifiList = " + wifiList.toString());
+
+//                    mutableLiveDataConnectedWifi.setValue(wifiList);
+//                    mutableLiveDataConnectedSsid.setValue(connectedWifiSsid);
+                }
+            }
+        }
+
+    }
+
+
     private void handleScanResults(JobParameters jobParameters) {
         String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION,
                 Manifest.permission.ACCESS_COARSE_LOCATION};
@@ -154,14 +250,14 @@ public class NetworkJobService extends JobService {
                 }
             }
         }
-        jobFinished(jobParameters, true); // set to true for continuously, otherwise will set to false for 15 min each job
+        jobFinished(jobParameters, false); // set to true for continuously, otherwise will set to false for 15 min each job
     }
 
     @Override
     public boolean onStopJob(JobParameters jobParameters) {
         Log.d("NetworkJobService Stop", "Job Stop");
 
-        return true;
+        return false; // true
     }
 
     public static void scheduleJob(Context context) {

+ 136 - 13
app/src/main/java/com/vpn/fastestvpnservice/fcm/WiFiMonitorService.java

@@ -5,12 +5,19 @@ import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.Service;
+import android.app.job.JobParameters;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.ServiceConnection;
 import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.net.wifi.ScanResult;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
+import android.os.Binder;
 import android.os.Build;
 import android.os.IBinder;
 import android.util.Log;
@@ -20,10 +27,14 @@ import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 
 import com.vpn.fastestvpnservice.R;
+import com.vpn.fastestvpnservice.beans.AutoConnectModel;
+import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper;
+import com.vpn.fastestvpnservice.screens.settingsScreenAll.AutoConnectScreenKt;
 import com.vpn.fastestvpnservice.utils.WifiScanReceiver;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Timer;
 
 public class WiFiMonitorService extends Service {
@@ -34,18 +45,33 @@ public class WiFiMonitorService extends Service {
     private WifiManager wifiManager;
     private static final int NOTIFICATION_ID = 2;
 
+   public static String WIFI_STATE_CHANGED = "WIFI_STATE_CHANGED";
+
     private IntentFilter intentFilter;
 
     public static final List<ScanResult> scanResultsStatic = new ArrayList<>();
 
+    private final IBinder binder = new LocalBinder();
+
+    public class LocalBinder extends Binder {
+        public WiFiMonitorService getService() {
+            return WiFiMonitorService.this;
+        }
+    }
+
     @Override
     public void onCreate() {
         super.onCreate();
 
+        Log.d("open wifi rec s Start", "Started onStartCommand");
+
+        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
         wifiScanReceiver = new WifiScanReceiver();
         intentFilter = new IntentFilter();
         intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
 
+        registerReceiver(wifiScanReceiver, intentFilter);
+
 //        NetworkJobService.scheduleJob(getApplicationContext());
 
     }
@@ -80,28 +106,121 @@ public class WiFiMonitorService extends Service {
 
         startForegroundNotification();
 
-        Log.d("open wifi rec s Start", "Started onStartCommand");
-        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
-        wifiScanReceiver = new WifiScanReceiver();
-        intentFilter = new IntentFilter();
-        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+//        if (Objects.equals(intent.getAction(), WIFI_STATE_CHANGED)) {
+//            Log.d("WIFI_STATE_CHANGED", "WIFI_STATE_CHANGED in WMS");
+//
+////            getConnectedWifiService();
+//        }
 
-        ContextCompat.registerReceiver(getApplicationContext(), wifiScanReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
+//        getConnectedWifiService();
 
-        boolean status = wifiManager.startScan();
-        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
-            return START_STICKY;
-        }
+//        boolean status = wifiManager.startScan();
+//        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+//            return START_STICKY;
+//        }
 
         // currently commenting below ...
 
 //        List<ScanResult> results = wifiManager.getScanResults();
 //        scanResultsStatic.addAll(results);
-//        Log.d("open wifi rec s results", results.size() + " " + status);
+//        Log.d("wifi_mon_ser", results.size() + " & " + status);
 
         return START_STICKY;
     }
 
+    public void getConnectedWifiService() {
+
+        Log.d("WiFiMonitorService", "Started");
+
+        if (ActivityCompat.checkSelfPermission(
+                getApplicationContext(),
+                Manifest.permission.ACCESS_FINE_LOCATION
+        ) != PackageManager.PERMISSION_GRANTED ||
+                ActivityCompat.checkSelfPermission(
+                        getApplicationContext(),
+                        Manifest.permission.ACCESS_COARSE_LOCATION
+                ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            return;
+        }
+
+        // currently commenting below ...
+
+        BasePreferenceHelper basePreferenceHelper = new BasePreferenceHelper(getApplicationContext());
+        wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+        List<ScanResult> scanResults = wifiManager.getScanResults();
+        Log.d("WiFiMonitorService", "Job scanResults + " + scanResults.size());
+
+        List<ScanResult> nonZeroList = new ArrayList<>();
+
+        if (!scanResults.isEmpty()) {
+            Log.d("WiFiMonitorService 1", scanResults.size() + "");
+            nonZeroList.addAll(scanResults);
+        }
+        else {
+            Log.d("WiFiMonitorService 2", WiFiMonitorService.scanResultsStatic.size() + "");
+        }
+
+        Log.d("WiFiMonitorService in", "Inside");
+
+//        WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+
+        if (wifiManager.isWifiEnabled()) {
+            Log.d("WiFiMonitorService", "isWifiEnabled");
+            ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+
+            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
+
+            if (activeNetwork != null && activeNetwork.isConnected() && activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
+                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+
+                Log.d("WiFiMonitorService", "activeNetwork = " + activeNetwork);
+
+                if (wifiInfo != null && wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
+                    String connectedWifiSsid = wifiInfo.getSSID().replace("\"", "");
+
+                    Log.d("WiFiMonitorServicecssid", "wifiInfo.getSSID() = " + wifiInfo.getSSID());
+
+                    ArrayList<AutoConnectModel> autoConnectWifiList = basePreferenceHelper.getAutoConnectList();
+                    ArrayList<AutoConnectModel> wifiList = new ArrayList<>();
+
+                    Log.d("WiFiMonitorService", "connectedWifiSsid = " + connectedWifiSsid);
+                    Log.d("WiFiMonitorService", "Before autoConnectWifiList = " + (autoConnectWifiList != null ? autoConnectWifiList.size() : 0));
+
+                    if (autoConnectWifiList != null && !autoConnectWifiList.isEmpty()) {
+                        wifiList.addAll(autoConnectWifiList);
+
+                        boolean isConnectedSsidInList = false;
+                        for (AutoConnectModel model : wifiList) {
+                            if (model.getWifiName().equals(connectedWifiSsid)) {
+                                isConnectedSsidInList = true;
+                                break;
+                            }
+                        }
+
+                        if (!isConnectedSsidInList && !connectedWifiSsid.isEmpty()) {
+                            wifiList.add(0, new AutoConnectModel(connectedWifiSsid, false));
+                        }
+                    } else {
+                        if (!connectedWifiSsid.isEmpty()) {
+                            wifiList.add(new AutoConnectModel(connectedWifiSsid, false));
+                        }
+                    }
+
+                    Log.d("WiFiMonitorService", "wifiList = " + wifiList.size());
+                    Log.d("WiFiMonitorService", "wifiList = " + wifiList.toString());
+
+                    AutoConnectScreenKt.getAutoConnectCallback().autoConnectList(wifiList);
+                    AutoConnectScreenKt.getAutoConnectCallback().autoConnectedWifi(connectedWifiSsid);
+
+//                    mutableLiveDataConnectedWifi.setValue(wifiList);
+//                    mutableLiveDataConnectedSsid.setValue(connectedWifiSsid);
+                }
+            }
+        }
+
+    }
+
     private void startForegroundNotification() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             String channelId = "FastestVPN_Foreground_Wifi";
@@ -141,12 +260,16 @@ public class WiFiMonitorService extends Service {
     @Override
     public void onDestroy() {
         super.onDestroy();
-//        unregisterReceiver(wifiScanReceiver);
+        if (wifiScanReceiver != null) {
+            Log.d("WiFiMonitorService", "unregisterReceiver(wifiScanReceiver)");
+            unregisterReceiver(wifiScanReceiver);
+        }
+
     }
 
     @Nullable
     @Override
     public IBinder onBind(Intent intent) {
-        return null;
+        return binder;
     }
 }

+ 11 - 0
app/src/main/java/com/vpn/fastestvpnservice/interfaces/AutoConnectCallback.kt

@@ -0,0 +1,11 @@
+package com.vpn.fastestvpnservice.interfaces
+
+import androidx.compose.runtime.Composable
+import com.vpn.fastestvpnservice.beans.AutoConnectModel
+
+interface AutoConnectCallback {
+
+    fun autoConnectList(wifiList: ArrayList<AutoConnectModel>)
+
+    fun autoConnectedWifi(connectedWifiSsid: String)
+}

+ 0 - 2
app/src/main/java/com/vpn/fastestvpnservice/interfaces/NetworkSpeedCallback.kt

@@ -1,7 +1,5 @@
 package com.vpn.fastestvpnservice.interfaces
 
-import androidx.compose.runtime.Composable
-
 interface NetworkSpeedCallback {
     fun setNetworkSpeed(down: Double, up: Double, downUnit: String, upUnit: String)
 }

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

@@ -48,18 +48,46 @@ import androidx.compose.ui.platform.LocalView
 import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.unit.dp
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import com.vpn.fastestvpnservice.R
+import com.vpn.fastestvpnservice.beans.AutoConnectModel
 import com.vpn.fastestvpnservice.customItems.AutoConnectItem
 import com.vpn.fastestvpnservice.customItems.AutoConnectWifiItem
 import com.vpn.fastestvpnservice.fcm.WiFiMonitorService
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
+import com.vpn.fastestvpnservice.interfaces.AutoConnectCallback
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.AddRowSettingsSmart
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.isSettingsViewModel
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.settingsViewModel
+import com.vpn.fastestvpnservice.viewmodels.SettingsViewModel
 
 var selectedSmart: MutableState<String> = mutableStateOf("")
 var isSwitchMutable: MutableState<Boolean> = mutableStateOf(false)
 
+val autoConnectCallback = object : AutoConnectCallback {
+
+    override fun autoConnectList(wifiList: ArrayList<AutoConnectModel>) {
+        Log.d("autoConnectCallback", "wifiList = $wifiList")
+
+        if (isSettingsViewModel) {
+            Log.d("autoConnectCallback", "wifiList :: initialized")
+            settingsViewModel.mutableLiveDataConnectedWifi.value = wifiList
+        }
+    }
+
+    override fun autoConnectedWifi(connectedWifiSsid: String) {
+        Log.d("autoConnectCallback", "connectedWifiSsid = $connectedWifiSsid")
+
+        if (isSettingsViewModel) {
+            Log.d("autoConnectCallback", "autoConnectedWifi :: initialized")
+            settingsViewModel.mutableLiveDataConnectedSsid.value = connectedWifiSsid
+        }
+    }
+
+}
+
 @Composable
 fun AutoConnectScreen(navHostController: NavHostController) {
     val context = LocalContext.current
@@ -73,7 +101,7 @@ fun AutoConnectScreen(navHostController: NavHostController) {
     val wifiList = settingsViewModel.liveDataConnectedWifi.observeAsState().value
     val connectedWifiSsid = settingsViewModel.liveDataConnectedSsid.observeAsState().value
 
-    Log.d("autoconnect", "wifiList ACS = ${wifiList.toString()}")
+    Log.d("autoconnect", "wifiList ACS = ${wifiList.toString()} $connectedWifiSsid")
 
     Box(
         modifier = Modifier

+ 46 - 9
app/src/main/java/com/vpn/fastestvpnservice/utils/WifiScanReceiver.java

@@ -4,26 +4,59 @@ import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.ServiceConnection;
 import android.media.RingtoneManager;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
 import android.os.Build;
+import android.os.IBinder;
 import android.util.Log;
 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.fcm.WiFiMonitorService;
+import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper;
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.SettingsScreenKt;
 import com.vpn.fastestvpnservice.viewmodels.SettingsViewModel;
 
+import java.util.Objects;
+
 import de.blinkt.openvpn.core.App;
 
 public class WifiScanReceiver extends BroadcastReceiver {
 
     Context context;
+    private WiFiMonitorService wiFiMonitorService;
+    private boolean isBound = false;
+
+    private ServiceConnection serviceConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.d("WifiScanReceiver", "onServiceConnected");
+
+            WiFiMonitorService.LocalBinder binder = (WiFiMonitorService.LocalBinder) service;
+            wiFiMonitorService = binder.getService();
+            isBound = true;
+
+            wiFiMonitorService.getConnectedWifiService();
+
+            if (isBound) {
+                context.unbindService(this);
+                isBound = false;
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.d("WifiScanReceiver", "onServiceDisconnected");
+            isBound = false;
+        }
+    };
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -33,21 +66,25 @@ public class WifiScanReceiver extends BroadcastReceiver {
 
         String action = intent.getAction();
 
-        if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+        if (Objects.equals(action, WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+            BasePreferenceHelper basePreferenceHelper = new BasePreferenceHelper(context);
+            boolean isAutoConnectEnabled = basePreferenceHelper.getAutoConnectState();
 
             Log.d("WifiScanReceiver in", "Inside");
 
-            if (SettingsScreenKt.isSettingsViewModel()) {
-                Log.d("WifiScanReceiver in", "Yes");
-            } else {
-                Log.d("WifiScanReceiver in", "No");
-                SettingsScreenKt.settingsViewModel = new SettingsViewModel(context);
-            }
+            if (isAutoConnectEnabled) {
+                if (!SettingsScreenKt.isSettingsViewModel()) {
+                    Log.d("WifiScanReceiver in", "No");
+                    SettingsScreenKt.settingsViewModel = new SettingsViewModel(context);
+                }
 
-            SettingsScreenKt.settingsViewModel.getConnectedWifi();
+//                SettingsScreenKt.settingsViewModel.getConnectedWifi();
 
-//            NetworkJobService.scheduleJob(context); // now commenting, will use later...
+                Intent wifiIntent1 = new Intent(context, WiFiMonitorService.class);
+                context.bindService(wifiIntent1, serviceConnection, Context.BIND_AUTO_CREATE);
 
+//            NetworkJobService.scheduleJob(context); // now commenting, will use later...
+            }
         }
     }