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,  |