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