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