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

Commit 5e515d64 authored by Nikolas Havrikov's avatar Nikolas Havrikov Committed by Android (Google) Code Review
Browse files

Merge "Replace HashMap with ArrayMap in AppsFilterImpl"

parents a5ca8d24 3fa28af4
Loading
Loading
Loading
Loading
+14 −11
Original line number Original line Diff line number Diff line
@@ -81,11 +81,8 @@ import com.android.server.utils.Watcher;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;


/**
/**
 * Implementation of the methods that update the internal structures of AppsFilter. Because of the
 * 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")
    @GuardedBy("mQueryableViaUsesPermissionLock")
    @NonNull
    @NonNull
    private HashMap<String, Set<Integer>> mPermissionToUids;
    private final ArrayMap<String, ArraySet<Integer>> mPermissionToUids;


    /**
    /**
     * A cache that maps parsed {@link android.R.styleable#AndroidManifestUsesPermission
     * A cache that maps parsed {@link android.R.styleable#AndroidManifestUsesPermission
@@ -123,7 +120,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
     */
     */
    @GuardedBy("mQueryableViaUsesPermissionLock")
    @GuardedBy("mQueryableViaUsesPermissionLock")
    @NonNull
    @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
     * 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<>();
        mProtectedBroadcasts = new WatchedArraySet<>();
        mProtectedBroadcastsSnapshot = new SnapshotCache.Auto<>(
        mProtectedBroadcastsSnapshot = new SnapshotCache.Auto<>(
                mProtectedBroadcasts, mProtectedBroadcasts, "AppsFilter.mProtectedBroadcasts");
                mProtectedBroadcasts, mProtectedBroadcasts, "AppsFilter.mProtectedBroadcasts");
        mPermissionToUids = new HashMap<>();
        mPermissionToUids = new ArrayMap<>();
        mUsesPermissionToUids = new HashMap<>();
        mUsesPermissionToUids = new ArrayMap<>();


        mSnapshot = new SnapshotCache<AppsFilterSnapshot>(this, this) {
        mSnapshot = new SnapshotCache<AppsFilterSnapshot>(this, this) {
            @Override
            @Override
@@ -609,7 +606,10 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
                    // Lookup in the mPermissionToUids cache if installed packages have
                    // Lookup in the mPermissionToUids cache if installed packages have
                    // defined this permission.
                    // defined this permission.
                    if (mPermissionToUids.containsKey(usesPermissionName)) {
                    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()) {
                            if (targetAppId != newPkgSetting.getAppId()) {
                                mQueryableViaUsesPermission.add(newPkgSetting.getAppId(),
                                mQueryableViaUsesPermission.add(newPkgSetting.getAppId(),
                                        targetAppId);
                                        targetAppId);
@@ -619,7 +619,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
                    // Record in mUsesPermissionToUids that a permission was requested
                    // Record in mUsesPermissionToUids that a permission was requested
                    // by a new package
                    // by a new package
                    if (!mUsesPermissionToUids.containsKey(usesPermissionName)) {
                    if (!mUsesPermissionToUids.containsKey(usesPermissionName)) {
                        mUsesPermissionToUids.put(usesPermissionName, new HashSet<>());
                        mUsesPermissionToUids.put(usesPermissionName, new ArraySet<>());
                    }
                    }
                    mUsesPermissionToUids.get(usesPermissionName).add(newPkgSetting.getAppId());
                    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
                    // Lookup in the mUsesPermissionToUids cache if installed packages have
                    // requested this permission.
                    // requested this permission.
                    if (mUsesPermissionToUids.containsKey(permissionName)) {
                    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()) {
                            if (queryingAppId != newPkgSetting.getAppId()) {
                                mQueryableViaUsesPermission.add(queryingAppId,
                                mQueryableViaUsesPermission.add(queryingAppId,
                                        newPkgSetting.getAppId());
                                        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
                    // Record in mPermissionToUids that a permission was defined by a new package
                    if (!mPermissionToUids.containsKey(permissionName)) {
                    if (!mPermissionToUids.containsKey(permissionName)) {
                        mPermissionToUids.put(permissionName, new HashSet<>());
                        mPermissionToUids.put(permissionName, new ArraySet<>());
                    }
                    }
                    mPermissionToUids.get(permissionName).add(newPkgSetting.getAppId());
                    mPermissionToUids.get(permissionName).add(newPkgSetting.getAppId());
                }
                }