diff options
| author | 2021-04-29 04:26:06 +0000 | |
|---|---|---|
| committer | 2021-04-29 04:26:06 +0000 | |
| commit | e8b84a6e00ef7dea4602de810dfdca1c74f3040f (patch) | |
| tree | 8e4001f416855a237e86a42968adbe12ee2a95b1 | |
| parent | f7857d0b6da12c5913600f467f882772f0c15fc6 (diff) | |
| parent | 4f0b921e9d6580001fb2f6d6542c285f51113a85 (diff) | |
Merge "Remap per app id for AR/location sources" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/policy/AppOpsPolicy.java | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java index 622b758e0e21..3a097a71e3e9 100644 --- a/services/core/java/com/android/server/policy/AppOpsPolicy.java +++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java @@ -280,14 +280,15 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat private static void updateAllowListedTagsForPackageLocked(int uid, String packageName, Set<String> allowListedTags, ConcurrentHashMap<Integer, ArrayMap<String, ArraySet<String>>> datastore) { + final int appId = UserHandle.getAppId(uid); // We make a copy of the per UID state to limit our mutation to one // operation in the underlying concurrent data structure. - ArrayMap<String, ArraySet<String>> uidTags = datastore.get(uid); - if (uidTags != null) { - uidTags = new ArrayMap<>(uidTags); + ArrayMap<String, ArraySet<String>> appIdTags = datastore.get(appId); + if (appIdTags != null) { + appIdTags = new ArrayMap<>(appIdTags); } - ArraySet<String> packageTags = (uidTags != null) ? uidTags.get(packageName) : null; + ArraySet<String> packageTags = (appIdTags != null) ? appIdTags.get(packageName) : null; if (packageTags != null) { packageTags = new ArraySet<>(packageTags); } @@ -299,17 +300,17 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } else { packageTags = new ArraySet<>(allowListedTags); } - if (uidTags == null) { - uidTags = new ArrayMap<>(); + if (appIdTags == null) { + appIdTags = new ArrayMap<>(); } - uidTags.put(packageName, packageTags); - datastore.put(uid, uidTags); - } else if (uidTags != null) { - uidTags.remove(packageName); - if (!uidTags.isEmpty()) { - datastore.put(uid, uidTags); + appIdTags.put(packageName, packageTags); + datastore.put(appId, appIdTags); + } else if (appIdTags != null) { + appIdTags.remove(packageName); + if (!appIdTags.isEmpty()) { + datastore.put(appId, appIdTags); } else { - datastore.remove(uid); + datastore.remove(appId); } } } @@ -318,9 +319,10 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat @NonNull String attributionTag, @NonNull Map<Integer, ArrayMap<String, ArraySet<String>>> mappedOps) { // Only a single lookup from the underlying concurrent data structure - final ArrayMap<String, ArraySet<String>> uidTags = mappedOps.get(uid); - if (uidTags != null) { - final ArraySet<String> packageTags = uidTags.get(packageName); + final int appId = UserHandle.getAppId(uid); + final ArrayMap<String, ArraySet<String>> appIdTags = mappedOps.get(appId); + if (appIdTags != null) { + final ArraySet<String> packageTags = appIdTags.get(packageName); if (packageTags != null && packageTags.contains(attributionTag)) { return true; } |