diff options
| author | 2024-06-08 15:21:06 +0000 | |
|---|---|---|
| committer | 2024-07-01 18:46:04 +0000 | |
| commit | ea72b46dff41e239b4d15c6345bf53e717d63d97 (patch) | |
| tree | 828403c65d7acb5a7bbe91d935afe800004843d8 | |
| parent | b44a5d6c58ed2fbe5aff1bb255500c68a26af89c (diff) | |
Replace noteOp call to checkOp
Also memoize the legacy storage and no isolated storage app op, to avoid calling AppOpManager multiple number of times.
detail can be found
https://buganizer.corp.google.com/issues/323574186#comment13 and https://buganizer.corp.google.com/issues/323574186#comment16
Bug: b/323574186
Flag: EXEMPT bugfix
Change-Id: I0d98a6c323253a99065f564ad4c8beb94e63e14c
| -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, |