summaryrefslogtreecommitdiff
path: root/app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt')
-rw-r--r--app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt48
1 files changed, 48 insertions, 0 deletions
diff --git a/app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt b/app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt
new file mode 100644
index 0000000..7ee2e58
--- /dev/null
+++ b/app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt
@@ -0,0 +1,48 @@
+package com.draco.buoy.viewmodels
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.draco.buoy.utils.PermissionUtils
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+class PermissionActivityViewModel(application: Application) : AndroidViewModel(application) {
+ private val _permissionGranted = MutableLiveData(false)
+ val permissionGranted: LiveData<Boolean> = _permissionGranted
+
+ private fun askRootPermission() {
+ try {
+ ProcessBuilder(
+ "su",
+ "-c",
+ "pm grant com.draco.purr android.permission.WRITE_SECURE_SETTINGS"
+ ).start()
+ } catch (_: Exception) {}
+ }
+
+ private fun isWriteSecureSettingsPermissionGranted(): Boolean {
+ val context = getApplication<Application>().applicationContext
+ return PermissionUtils.isPermissionsGranted(context, android.Manifest.permission.WRITE_SECURE_SETTINGS)
+ }
+
+ private fun startPermissionCheckLoop() {
+ viewModelScope.launch(Dispatchers.IO) {
+ while (!isWriteSecureSettingsPermissionGranted())
+ delay(100)
+ _permissionGranted.postValue(true)
+ }
+ }
+
+ init {
+ if (!isWriteSecureSettingsPermissionGranted()) {
+ viewModelScope.launch(Dispatchers.IO) {
+ askRootPermission()
+ }
+ startPermissionCheckLoop()
+ }
+ }
+} \ No newline at end of file