From 66235b2f6996aaa5f899071c9f2e7c719bfd229c Mon Sep 17 00:00:00 2001 From: Richard Raya Date: Sun, 18 Sep 2022 13:58:22 -0300 Subject: [PATCH] ExternalStorageProvider: Conditionally remove SAF restrictions [1/2] * Original commit gutted out entire codes in shouldBlockDirectoryFromTree which could be lead to major privacy leakage due to those invasive apps' behavior * Add toggle instead so that users could opt in/out Original commit msg: ExternalStorageProvider: Remove SAF restrictions * Inspired by https://github.com/DanGLES3/NoStorageRestrict Change-Id: I073d9bb8edd49224e17c76a43683365a64686768 Signed-off-by: Richard Raya Signed-off-by: Gustavo Mendes Change-Id: I9f987b7dae80af95275f743cfbc935582ff2129e Signed-off-by: someone5678 Signed-off-by: Ghosuto --- core/java/android/provider/Settings.java | 6 ++++++ .../android/externalstorage/ExternalStorageProvider.java | 6 ++++++ 2 files changed, 12 insertions(+) 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()) {