diff options
| -rw-r--r-- | core/java/android/os/Environment.java | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index a459aaa42930..2c7b9c02330e 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -159,6 +159,8 @@ public class Environment { @UnsupportedAppUsage private static UserEnvironment sCurrentUser; private static boolean sUserRequired; + private static Boolean sLegacyStorageAppOp; + private static Boolean sNoIsolatedStorageAppOp; static { initForCurrentUser(); @@ -1459,15 +1461,23 @@ public class Environment { final AppOpsManager appOps = context.getSystemService(AppOpsManager.class); final String opPackageName = context.getOpPackageName(); - if (appOps.noteOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE, uid, - opPackageName) == AppOpsManager.MODE_ALLOWED) { - return true; + if (sLegacyStorageAppOp == null) { + sLegacyStorageAppOp = + appOps.checkOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE, uid, opPackageName) == + AppOpsManager.MODE_ALLOWED; + } + if (sLegacyStorageAppOp) { + return sLegacyStorageAppOp; } // 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; + if (sNoIsolatedStorageAppOp == null) { + sNoIsolatedStorageAppOp = + appOps.checkOpNoThrow(AppOpsManager.OP_NO_ISOLATED_STORAGE, uid, + opPackageName) == AppOpsManager.MODE_ALLOWED; + } + return sNoIsolatedStorageAppOp; } private static boolean isScopedStorageEnforced(boolean defaultScopedStorage, |