diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aff44c68..47e372ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ + private lateinit var openFilesResultLauncher: ActivityResultLauncher private lateinit var saveFileResultLauncher: ActivityResultLauncher + private lateinit var requestPermissionLauncher: ActivityResultLauncher fun setContext(activity: AppCompatActivity) { this.activity = WeakReference(activity) @@ -73,6 +76,9 @@ object GeodeUtils { } failedCallback() } + requestPermissionLauncher = activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> + permissionCallback(isGranted) + } } @JvmStatic @@ -249,4 +255,35 @@ object GeodeUtils { fun isGeodeUri(uri: Uri): Boolean { return "com.geode.launcher.user" == uri.authority } + + @JvmStatic + fun getPermissionStatus(permission: String): Boolean { + return ContextCompat.checkSelfPermission( + activity.get()?.applicationContext ?: return false, + permission + ) == PackageManager.PERMISSION_GRANTED + } + + @JvmStatic + fun requestPermission(permission: String) { + if (getPermissionStatus(permission)) { + permissionCallback(true) + return + } + + activity.get()?.run { + try { + requestPermissionLauncher.launch(permission) + } catch (e: ActivityNotFoundException) { + permissionCallback(false) + } + + return + } + + permissionCallback(false) + } + + @Suppress("KotlinJniMissingFunction") + external fun permissionCallback(granted: Boolean) } \ No newline at end of file