Browse Source

Saving state of launch on startup when enabled and get callback on onActivityResult and saved on shared prefs

Khubaib 8 months ago
parent
commit
69cfdff215

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

@@ -45,6 +45,7 @@ import com.vpn.fastestvpnservice.interfaces.UpdateServersOnProtocol
 import com.vpn.fastestvpnservice.interfaces.VPNConnectionCallBacks
 import com.vpn.fastestvpnservice.navigation.SetUpNavGraph
 import com.vpn.fastestvpnservice.navigation.SetUpNavGraphTV
+import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.isSwitch
 import com.vpn.fastestvpnservice.screens.helpScreensAll.fileChooserCallback
 import com.vpn.fastestvpnservice.ui.theme.FastestVPNTheme
 import com.vpn.fastestvpnservice.utils.CustomExceptionHandler
@@ -88,6 +89,11 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
             }
         }
 
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Settings.canDrawOverlays(this)) {
+            isSwitch.value = true
+            basePreferenceHelper.saveLaunchState(true)
+        }
+
         WindowCompat.setDecorFitsSystemWindows(window, false)
 
         setContent {
@@ -176,14 +182,21 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         super.onActivityResult(requestCode, resultCode, data)
 
-        Log.d("test_file_chat", "onActivityResult: $requestCode $resultCode $data")
         if (requestCode == 0) {
-            Log.d("test_file_chat", "onActivityResult: ${fileChooserCallback.toString()}")
+//            Log.d("test_file_chat", "onActivityResult: ${fileChooserCallback.toString()}")
             fileChooserCallback?.onReceiveValue(null)
         } else {
             fileChooserCallback?.onReceiveValue(arrayOf(Uri.parse(data?.dataString)))
         }
         fileChooserCallback = null
+
+        if (requestCode == SCREEN_OVERLAY) {
+            val basePreferenceHelper = BasePreferenceHelper(this)
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Settings.canDrawOverlays(this)) {
+                isSwitch.value = true
+                basePreferenceHelper.saveLaunchState(true)
+            }
+        }
     }
 
     override fun getContainerId(): Int {
@@ -264,6 +277,7 @@ open class MainActivity : DockActivity(), ConnectivityReceiver.ConnectivityRecei
         var updateServersOnProtocol: UpdateServersOnProtocol? = null
         var callBacks: CallBacks? = null
         var onBackPressedOnTV: OnBackPressedOnTV? = null
+        val SCREEN_OVERLAY = 12345
     }
 
     override fun onNetworkConnectionChanged(isConnected: Boolean) {

+ 12 - 5
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/SettingsScreen.kt

@@ -62,6 +62,7 @@ import androidx.compose.material3.rememberModalBottomSheetState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableStateOf
@@ -96,6 +97,7 @@ import androidx.core.content.ContextCompat.startActivity
 import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import androidx.navigation.compose.rememberNavController
+import com.vpn.fastestvpnservice.MainActivity
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.Protocol
 import com.vpn.fastestvpnservice.beans.isDarkTheme
@@ -118,12 +120,17 @@ import de.blinkt.openvpn.core.App
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 
+var isSwitch: MutableState<Boolean> = mutableStateOf(false)
+
 @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
 @Composable
 fun Settings(navHostController: NavHostController, activity: ComponentActivity) {
     val context = LocalContext.current
+    val basePreferenceHelper = BasePreferenceHelper(context)
     var isLaunched by remember { mutableStateOf(false) }
 
+    isSwitch.value = basePreferenceHelper.getLaunchState()
+
     CompositionLocalProvider(
         LocalOverscrollConfiguration provides null
     ) {
@@ -401,19 +408,19 @@ fun ColumnScope.AddRowLaunchSwitch(
                 .align(Alignment.CenterVertically),
             color = Color.Transparent
         ) {
-            var isSwitch by remember { mutableStateOf(basePreferenceHelper.getLaunchState()) }
+//            var isSwitch by remember { mutableStateOf(basePreferenceHelper.getLaunchState()) }
             Switch(
-                checked = isSwitch,
+                checked = isSwitch.value,
                 onCheckedChange = { state ->
                     if (state) {
                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Settings.canDrawOverlays(context)) {
                             onClick()
                         } else {
-                            isSwitch = true
+                            isSwitch.value = true
                             basePreferenceHelper.saveLaunchState(true)
                         }
                     } else {
-                        isSwitch = false
+                        isSwitch.value = false
                         basePreferenceHelper.saveLaunchState(false)
                     }
                 },
@@ -535,7 +542,7 @@ fun ColumnScope.LaunchDialog(
                         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !Settings.canDrawOverlays(context)) {
                             val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
                             intent.data = Uri.parse("package:${activity.packageName}")
-                            activity.startActivityForResult(intent, 12345)
+                            activity.startActivityForResult(intent, MainActivity.SCREEN_OVERLAY)
                         }
 
                         onCancel()