diff --git a/limbo-android-lib/src/main/AndroidManifest.xml b/limbo-android-lib/src/main/AndroidManifest.xml index 66775b5a0..198f4fd76 100644 --- a/limbo-android-lib/src/main/AndroidManifest.xml +++ b/limbo-android-lib/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + @@ -17,6 +18,10 @@ - + \ No newline at end of file + + + diff --git a/limbo-android-lib/src/main/java/com/max2idea/android/limbo/utils/FileManager.java b/limbo-android-lib/src/main/java/com/max2idea/android/limbo/utils/FileManager.java index 5192655a8..fa4f983c6 100644 --- a/limbo-android-lib/src/main/java/com/max2idea/android/limbo/utils/FileManager.java +++ b/limbo-android-lib/src/main/java/com/max2idea/android/limbo/utils/FileManager.java @@ -163,8 +163,25 @@ private static int getASFFileManagerRequestCode(int requestCode) { } } + private static void requestStorageManager(Activity activity, int requestCode) { + if (android.os.Build.VERSION.SDK_INT >= 30) { // Android 11 + try { + if(!Environment.isExternalStorageManager()) { + Intent i = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + i.setData(Uri.fromParts("package", activity.getPackageName(), null)); + activity.startActivityForResult(i, requestCode); + } + } catch (Exception e) { + Log.e(TAG, "Error requesting storage manager permission: " + + e.getMessage()); + } + } + } + public static void promptLegacyStorageAccess(Activity activity, LimboActivity.FileType fileType, int requestCode, String lastDir) { + requestStorageManager(activity, requestCode); + String dir = null; try { @@ -192,6 +209,9 @@ public static Intent getFileManIntent(Activity activity) { } protected static void promptOpenFileASF(Activity context, LimboActivity.FileType fileType, int requestCode, String lastDir) { + + requestStorageManager(activity, requestCode); + Intent intent = null; if (isFileTypeDirectory(fileType)) intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);