Loading services/core/java/com/android/server/pm/AppsFilterImpl.java +14 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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()); } } Loading @@ -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()); Loading @@ -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()); } } Loading Loading
services/core/java/com/android/server/pm/AppsFilterImpl.java +14 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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()); } } Loading @@ -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()); Loading @@ -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()); } } Loading