diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 39ae2645bea65..d5c9cda0a4cc2 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -20365,6 +20365,12 @@ public static boolean putFloat(ContentResolver cr, String name, float value) { */ public static final String RESTRICTED_NETWORKING_MODE = "restricted_networking_mode"; + /** + * Control whether to remove the restriction when selecting folders through SAF. + * @hide + */ + public static final String NO_STORAGE_RESTRICT = "no_storage_restrict"; + /** * Setting indicating whether Low Power Standby is enabled, if supported. * diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 78255627903d0..9499db2b74545 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -386,6 +386,12 @@ private boolean isRestrictedPath(String rootId, String canonicalPath) { @Override protected boolean shouldBlockDirectoryFromTree(@NonNull String documentId) throws FileNotFoundException { + // Remove the restriction if user really want it. + if (Settings.Secure.getInt( + getContext().getContentResolver(), Settings.Global.NO_STORAGE_RESTRICT, 0) == 1) { + return false; + } + final File dir = getFileForDocId(documentId, false); // The file is null or it is not a directory if (dir == null || !dir.isDirectory()) {