From 26d79d5f4afa732ff3d250ffb5db721186c01308 Mon Sep 17 00:00:00 2001 From: darthpaul Date: Sun, 31 Oct 2021 10:05:50 +0000 Subject: [PATCH] handle MANAGE_EXTERNAL_STORAGE permission for >=API 30 --- app/src/main/AndroidManifest.xml | 1 + .../pro/activities/MainActivity.kt | 50 +++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a7adeefd..e9f14943 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + 1 } @@ -268,8 +275,8 @@ class MainActivity : SimpleActivity() { } private fun tryInitFileManager() { - val hadPermission = hasPermission(PERMISSION_WRITE_STORAGE) - handlePermission(PERMISSION_WRITE_STORAGE) { + val hadPermission = hasStoragePermission() + handleStoragePermission { checkOTGPath() if (it) { if (main_view_pager.adapter == null) { @@ -286,6 +293,43 @@ class MainActivity : SimpleActivity() { } } + private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) { + actionOnPermission = null + if (hasStoragePermission()) { + callback(true) + } else { + if (isRPlus()) { + isAskingPermissions = true + actionOnPermission = callback + try { + val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION) + intent.addCategory("android.intent.category.DEFAULT") + intent.data = Uri.parse(String.format("package:%s", applicationContext.packageName)) + startActivityForResult(intent, MANAGE_STORAGE_RC) + } catch (e: Exception) { + e.printStackTrace() + val intent = Intent() + intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION + startActivityForResult(intent, MANAGE_STORAGE_RC) + } + } else { + handlePermission(PERMISSION_WRITE_STORAGE, callback) + } + } + } + + private fun hasStoragePermission(): Boolean { + return if (isRPlus()) Environment.isExternalStorageManager() else hasPermission(PERMISSION_WRITE_STORAGE) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { + super.onActivityResult(requestCode, resultCode, resultData) + isAskingPermissions = false + if(requestCode == MANAGE_STORAGE_RC && isRPlus()){ + actionOnPermission?.invoke(Environment.isExternalStorageManager()) + } + } + private fun initFileManager(refreshRecents: Boolean) { if (intent.action == Intent.ACTION_VIEW && intent.data != null) { val data = intent.data