From 3636c8c51cc9221db8ef4ade6c4231b68bd553ba Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Tue, 30 Mar 2021 19:43:10 -0700 Subject: Add permission validation Signed-off-by: Tyler Nijmeh --- .../draco/buoy/viewmodels/MainActivityViewModel.kt | 7 ++++ .../buoy/viewmodels/PermissionActivityViewModel.kt | 48 ++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 app/src/main/java/com/draco/buoy/viewmodels/MainActivityViewModel.kt create mode 100644 app/src/main/java/com/draco/buoy/viewmodels/PermissionActivityViewModel.kt (limited to 'app/src/main/java/com/draco/buoy/viewmodels') diff --git a/app/src/main/java/com/draco/buoy/viewmodels/MainActivityViewModel.kt b/app/src/main/java/com/draco/buoy/viewmodels/MainActivityViewModel.kt new file mode 100644 index 0000000..443b494 --- /dev/null +++ b/app/src/main/java/com/draco/buoy/viewmodels/MainActivityViewModel.kt @@ -0,0 +1,7 @@ +package com.draco.buoy.viewmodels + +import android.app.Application +import androidx.lifecycle.AndroidViewModel + +class MainActivityViewModel(application: Application) : AndroidViewModel(application) { +} \ No newline at end of file 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 = _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().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 -- cgit v1.2.3