From 01b5acc4b3d487d5588d29a44ade27ab94fec91c Mon Sep 17 00:00:00 2001 From: Abhijeet Kaur Date: Wed, 3 Feb 2021 14:24:06 +0000 Subject: [PATCH] Make OP_NO_ISOLATED_STORAGE accessible via public API If OP_NO_ISOLATED_STORAGE app-op is granted it gives apps legacy-app's access. Update public API for apps to check the state of legacy external storage access isExternalStorageLegacy() to respect OP_NO_ISOLATED_STORAGE appop. Bug: 172934418 Test: android.scopedstorage.cts.device.ScopedStorageDeviceTest#testDefaultNoIsolateStorageFlag Test: atest CtsScopedStorageHostTest Change-Id: I5cc2dfabedac57fe4183a586549c979145abcbfb --- core/java/android/os/Environment.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 518e29d510913..b18d23a00e5b2 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -1339,8 +1339,17 @@ public class Environment { } final AppOpsManager appOps = context.getSystemService(AppOpsManager.class); - return appOps.checkOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE, - uid, context.getOpPackageName()) == AppOpsManager.MODE_ALLOWED; + final String opPackageName = context.getOpPackageName(); + + if (appOps.noteOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE, uid, + opPackageName) == AppOpsManager.MODE_ALLOWED) { + return true; + } + + // Legacy external storage access is granted to instrumentations invoked with + // "--no-isolated-storage" flag. + return appOps.noteOpNoThrow(AppOpsManager.OP_NO_ISOLATED_STORAGE, uid, + opPackageName) == AppOpsManager.MODE_ALLOWED; } private static boolean isScopedStorageEnforced(boolean defaultScopedStorage,