diff options
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.kt | 48 |
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 |
