diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/AppsFilterImpl.java | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java index c97711b3aa80..5b837f1daa6f 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -81,11 +81,8 @@ import com.android.server.utils.Watcher; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Objects; -import java.util.Set; /** * Implementation of the methods that update the internal structures of AppsFilter. Because of the @@ -113,7 +110,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, */ @GuardedBy("mQueryableViaUsesPermissionLock") @NonNull - private HashMap<String, Set<Integer>> mPermissionToUids; + private final ArrayMap<String, ArraySet<Integer>> mPermissionToUids; /** * A cache that maps parsed {@link android.R.styleable#AndroidManifestUsesPermission @@ -123,7 +120,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, */ @GuardedBy("mQueryableViaUsesPermissionLock") @NonNull - private HashMap<String, Set<Integer>> mUsesPermissionToUids; + private final ArrayMap<String, ArraySet<Integer>> mUsesPermissionToUids; /** * Ensures an observer is in the list, exactly once. The observer cannot be null. The @@ -225,8 +222,8 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, mProtectedBroadcasts = new WatchedArraySet<>(); mProtectedBroadcastsSnapshot = new SnapshotCache.Auto<>( mProtectedBroadcasts, mProtectedBroadcasts, "AppsFilter.mProtectedBroadcasts"); - mPermissionToUids = new HashMap<>(); - mUsesPermissionToUids = new HashMap<>(); + mPermissionToUids = new ArrayMap<>(); + mUsesPermissionToUids = new ArrayMap<>(); mSnapshot = new SnapshotCache<AppsFilterSnapshot>(this, this) { @Override @@ -609,7 +606,10 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, // Lookup in the mPermissionToUids cache if installed packages have // defined this permission. if (mPermissionToUids.containsKey(usesPermissionName)) { - for (int targetAppId : mPermissionToUids.get(usesPermissionName)) { + final ArraySet<Integer> permissionDefiners = + mPermissionToUids.get(usesPermissionName); + for (int j = 0; j < permissionDefiners.size(); j++) { + final int targetAppId = permissionDefiners.valueAt(j); if (targetAppId != newPkgSetting.getAppId()) { mQueryableViaUsesPermission.add(newPkgSetting.getAppId(), targetAppId); @@ -619,7 +619,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, // Record in mUsesPermissionToUids that a permission was requested // by a new package if (!mUsesPermissionToUids.containsKey(usesPermissionName)) { - mUsesPermissionToUids.put(usesPermissionName, new HashSet<>()); + mUsesPermissionToUids.put(usesPermissionName, new ArraySet<>()); } mUsesPermissionToUids.get(usesPermissionName).add(newPkgSetting.getAppId()); } @@ -633,7 +633,10 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, // Lookup in the mUsesPermissionToUids cache if installed packages have // requested this permission. if (mUsesPermissionToUids.containsKey(permissionName)) { - for (int queryingAppId : mUsesPermissionToUids.get(permissionName)) { + final ArraySet<Integer> permissionUsers = mUsesPermissionToUids.get( + permissionName); + for (int j = 0; j < permissionUsers.size(); j++) { + final int queryingAppId = permissionUsers.valueAt(j); if (queryingAppId != newPkgSetting.getAppId()) { mQueryableViaUsesPermission.add(queryingAppId, newPkgSetting.getAppId()); @@ -642,7 +645,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } // Record in mPermissionToUids that a permission was defined by a new package if (!mPermissionToUids.containsKey(permissionName)) { - mPermissionToUids.put(permissionName, new HashSet<>()); + mPermissionToUids.put(permissionName, new ArraySet<>()); } mPermissionToUids.get(permissionName).add(newPkgSetting.getAppId()); } |