summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shikha Malhotra <shikhamalhotra@google.com> 2024-06-08 15:21:06 +0000
committer Shikha Malhotra <shikhamalhotra@google.com> 2024-07-01 18:46:04 +0000
commitea72b46dff41e239b4d15c6345bf53e717d63d97 (patch)
tree828403c65d7acb5a7bbe91d935afe800004843d8
parentb44a5d6c58ed2fbe5aff1bb255500c68a26af89c (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.java20
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,