Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8b84a6e authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Remap per app id for AR/location sources" into sc-dev

parents f7857d0b 4f0b921e
Loading
Loading
Loading
Loading
+18 −16
Original line number Original line Diff line number Diff line
@@ -280,14 +280,15 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat
    private static void updateAllowListedTagsForPackageLocked(int uid, String packageName,
    private static void updateAllowListedTagsForPackageLocked(int uid, String packageName,
            Set<String> allowListedTags, ConcurrentHashMap<Integer, ArrayMap<String,
            Set<String> allowListedTags, ConcurrentHashMap<Integer, ArrayMap<String,
            ArraySet<String>>> datastore) {
            ArraySet<String>>> datastore) {
        final int appId = UserHandle.getAppId(uid);
        // We make a copy of the per UID state to limit our mutation to one
        // We make a copy of the per UID state to limit our mutation to one
        // operation in the underlying concurrent data structure.
        // operation in the underlying concurrent data structure.
        ArrayMap<String, ArraySet<String>> uidTags = datastore.get(uid);
        ArrayMap<String, ArraySet<String>> appIdTags = datastore.get(appId);
        if (uidTags != null) {
        if (appIdTags != null) {
            uidTags = new ArrayMap<>(uidTags);
            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) {
        if (packageTags != null) {
            packageTags = new ArraySet<>(packageTags);
            packageTags = new ArraySet<>(packageTags);
        }
        }
@@ -299,17 +300,17 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat
            } else {
            } else {
                packageTags = new ArraySet<>(allowListedTags);
                packageTags = new ArraySet<>(allowListedTags);
            }
            }
            if (uidTags == null) {
            if (appIdTags == null) {
                uidTags = new ArrayMap<>();
                appIdTags = new ArrayMap<>();
            }
            }
            uidTags.put(packageName, packageTags);
            appIdTags.put(packageName, packageTags);
            datastore.put(uid, uidTags);
            datastore.put(appId, appIdTags);
        } else if (uidTags != null) {
        } else if (appIdTags != null) {
            uidTags.remove(packageName);
            appIdTags.remove(packageName);
            if (!uidTags.isEmpty()) {
            if (!appIdTags.isEmpty()) {
                datastore.put(uid, uidTags);
                datastore.put(appId, appIdTags);
            } else {
            } 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,
            @NonNull String attributionTag, @NonNull Map<Integer, ArrayMap<String,
            ArraySet<String>>> mappedOps) {
            ArraySet<String>>> mappedOps) {
        // Only a single lookup from the underlying concurrent data structure
        // Only a single lookup from the underlying concurrent data structure
        final ArrayMap<String, ArraySet<String>> uidTags = mappedOps.get(uid);
        final int appId = UserHandle.getAppId(uid);
        if (uidTags != null) {
        final ArrayMap<String, ArraySet<String>> appIdTags = mappedOps.get(appId);
            final ArraySet<String> packageTags = uidTags.get(packageName);
        if (appIdTags != null) {
            final ArraySet<String> packageTags = appIdTags.get(packageName);
            if (packageTags != null && packageTags.contains(attributionTag)) {
            if (packageTags != null && packageTags.contains(attributionTag)) {
                return true;
                return true;
            }
            }