Parcourir la source

Started service for autoconnect if enabled and stop service if auto-connect is disabled & worked on uninitialized for crashes free

Khubaib il y a 4 mois
Parent
commit
ff2da4c3f8

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

@@ -217,6 +217,12 @@
             </intent-filter>
         </receiver>
 
+        <service
+            android:name=".fcm.WiFiMonitorService"
+            android:enabled="true"
+            android:exported="true"
+            android:foregroundServiceType="specialUse" />
+
 <!--        <service-->
 <!--            android:name=".fcm.NetworkJobService"-->
 <!--            android:permission="android.permission.BIND_JOB_SERVICE" />-->

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

@@ -109,7 +109,7 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
         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()
 

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

@@ -43,6 +43,8 @@ import com.vpn.fastestvpnservice.beans.AutoConnectModel
 import com.vpn.fastestvpnservice.constants.smartConnect
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.homeViewModel1
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.isHomeViewModel1
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.isVpnConnectionsUtil
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.settingsViewModel
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.vpnConnectionsUtil
 import com.vpn.fastestvpnservice.viewmodels.HomeViewModel
@@ -329,7 +331,10 @@ fun onClickAutoConnect(
 
     val isTrustedWifiConnected = wifiListAdded.any { it.wifiName == connectedWifiSsid && it.isAdded }
 
-    val isConnect = homeViewModel1.isConnect.value
+    var isConnect = 0
+    if (isHomeViewModel1) {
+        isConnect = homeViewModel1.isConnect.value ?: 0
+    }
 
     Log.d("autoconnect_state", "isConnect = $isConnect $isTrustedWifiConnected")
 
@@ -352,17 +357,19 @@ fun onClickAutoConnect(
     Log.d("autoconnect_state", "smartServer = ${smartServer?.server_name} & $selectedSmartList")
     basePreferenceHelper.setConnectedServer(smartServer)
 
-    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()
+    if (isVpnConnectionsUtil) {
+        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

+ 26 - 9
app/src/main/java/com/vpn/fastestvpnservice/fcm/WiFiMonitorService.java

@@ -17,6 +17,7 @@ import android.util.Log;
 
 import androidx.annotation.Nullable;
 import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
 
 import com.vpn.fastestvpnservice.R;
 import com.vpn.fastestvpnservice.utils.WifiScanReceiver;
@@ -75,20 +76,20 @@ public class WiFiMonitorService extends Service {
 //            }
 //        }, 0, WIFI_SCAN_INTERVAL);
 
-//        startNotification();
+        //        registerReceiver(wifiScanReceiver, intentFilter);
+
+        startForegroundNotification();
 
         Log.d("open wifi rec s Start", "Started onStartCommand");
         wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
-        registerReceiver(wifiScanReceiver, intentFilter);
+        wifiScanReceiver = new WifiScanReceiver();
+        intentFilter = new IntentFilter();
+        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+
+        ContextCompat.registerReceiver(getApplicationContext(), wifiScanReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
+
         boolean status = wifiManager.startScan();
         if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
-            // TODO: Consider calling
-            //    ActivityCompat#requestPermissions
-            // here to request the missing permissions, and then overriding
-            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
-            //                                          int[] grantResults)
-            // to handle the case where the user grants the permission. See the documentation
-            // for ActivityCompat#requestPermissions for more details.
             return START_STICKY;
         }
 
@@ -101,6 +102,22 @@ public class WiFiMonitorService extends Service {
         return START_STICKY;
     }
 
+    private void startForegroundNotification() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            String channelId = "FastestVPN_Foreground_Wifi";
+            NotificationChannel channel = new NotificationChannel(channelId, "FastestVPN", NotificationManager.IMPORTANCE_LOW);
+            NotificationManager notificationManager = getSystemService(NotificationManager.class);
+
+            notificationManager.createNotificationChannel(channel);
+            Notification.Builder notification = new Notification.Builder(getApplicationContext(), channelId)
+                    .setContentTitle("Your connection is secured")
+                    .setContentText("Auto-connect feature will automatically detect network changes as set in the app settings.")
+                    .setColor(getApplicationContext().getResources().getColor(R.color.blue_text))
+                    .setSmallIcon(R.drawable.ic_logo_notify);
+            startForeground(1, notification.build());
+        }
+    }
+
     private void startNotification() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 

+ 3 - 0
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HomeScreen.kt

@@ -138,6 +138,9 @@ lateinit var navHostController1: NavHostController
 lateinit var homeViewModel1: HomeViewModel
 lateinit var vpnConnectionsUtil: VPNConnectionsUtil
 
+val isHomeViewModel1 get() = ::homeViewModel1.isInitialized
+val isVpnConnectionsUtil get() = ::vpnConnectionsUtil.isInitialized
+
  val onServer = object : ServerCallbacks {
 
      @Composable

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

@@ -1,6 +1,7 @@
 package com.vpn.fastestvpnservice.screens.settingsScreenAll
 
 import android.app.Activity
+import android.content.Intent
 import android.os.Build
 import android.provider.Settings
 import android.util.Log
@@ -54,9 +55,11 @@ import androidx.navigation.NavHostController
 import com.vpn.fastestvpnservice.R
 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.screens.bottomNavBarScreens.AddRowSettingsSmart
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.settingsViewModel
+import com.vpn.fastestvpnservice.utils.WireGuardService
 
 var selectedSmart: MutableState<String> = mutableStateOf("")
 
@@ -125,6 +128,19 @@ fun AutoConnectScreen(navHostController: NavHostController) {
                     onCheckedChange = { state ->
                         isSwitch = state
                         basePreferenceHelper.saveAutoConnectState(isSwitch)
+
+                        if (isSwitch) {
+                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                                Log.d("autoconnect_state", "startForegroundService")
+                                context.startForegroundService(Intent(context, WiFiMonitorService::class.java))
+                            }
+                            else{
+                                Log.d("autoconnect_state", "startService")
+                                context.startService(Intent(context, WiFiMonitorService::class.java))
+                            }
+                        } else {
+                            context.stopService(Intent(context, WiFiMonitorService::class.java))
+                        }
                     },
                     modifier = Modifier.scale(0.8F),
                     colors = SwitchDefaults.colors(