diff --git a/services/core/java/com/android/server/pm/AppsFilterBase.java b/services/core/java/com/android/server/pm/AppsFilterBase.java index 7ca1978b2031a..56582b98e8d3e 100644 --- a/services/core/java/com/android/server/pm/AppsFilterBase.java +++ b/services/core/java/com/android/server/pm/AppsFilterBase.java @@ -332,7 +332,7 @@ public abstract class AppsFilterBase implements AppsFilterSnapshot { return false; } } else { - if (!shouldFilterApplicationInternal(snapshot, + if (!shouldFilterApplicationInternal((Computer) snapshot, callingUid, callingSetting, targetPkgSetting, userId)) { return false; } @@ -365,7 +365,7 @@ public abstract class AppsFilterBase implements AppsFilterSnapshot { return mShouldFilterCache.valueAt(callingIndex, targetIndex); } - protected boolean shouldFilterApplicationInternal(PackageDataSnapshot snapshot, int callingUid, + protected boolean shouldFilterApplicationInternal(Computer snapshot, int callingUid, Object callingSetting, PackageStateInternal targetPkgSetting, int targetUserId) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "shouldFilterApplicationInternal"); diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java index 9fddc76b78c3e..0df90022579e9 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -55,7 +55,6 @@ import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.pkg.component.ParsedInstrumentation; -import com.android.server.pm.snapshot.PackageDataSnapshot; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; import com.android.server.utils.Watchable; @@ -309,7 +308,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, @Override public void onCompatChange(String packageName) { - PackageDataSnapshot snapshot = mPmInternal.snapshot(); + Computer snapshot = (Computer) mPmInternal.snapshot(); AndroidPackage pkg = snapshot.getPackage(packageName); if (pkg == null) { return; @@ -435,7 +434,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, * @param newPkgSetting the new setting being added * @param isReplace if the package is being replaced and may need extra cleanup. */ - public void addPackage(PackageDataSnapshot snapshot, PackageStateInternal newPkgSetting, + public void addPackage(Computer snapshot, PackageStateInternal newPkgSetting, boolean isReplace) { if (DEBUG_TRACING) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "filter.addPackage"); @@ -632,7 +631,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } } - private void updateEntireShouldFilterCache(PackageDataSnapshot snapshot, int subjectUserId) { + private void updateEntireShouldFilterCache(Computer snapshot, int subjectUserId) { final ArrayMap settings = snapshot.getPackageStates(); final UserInfo[] users = snapshot.getUserInfos(); @@ -653,7 +652,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, onChanged(); } - private void updateEntireShouldFilterCacheInner(PackageDataSnapshot snapshot, + private void updateEntireShouldFilterCacheInner(Computer snapshot, ArrayMap settings, UserInfo[] users, int subjectUserId) { @@ -684,7 +683,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, final ArrayMap packagesCache = new ArrayMap<>(); final UserInfo[][] usersRef = new UserInfo[1][]; - final PackageDataSnapshot snapshot = pmInternal.snapshot(); + final Computer snapshot = (Computer) pmInternal.snapshot(); final ArrayMap settings = snapshot.getPackageStates(); final UserInfo[] users = snapshot.getUserInfos(); @@ -712,7 +711,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, }, delayMs); } - public void onUserCreated(PackageDataSnapshot snapshot, int newUserId) { + public void onUserCreated(Computer snapshot, int newUserId) { if (!mCacheReady) { return; } @@ -727,7 +726,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, onChanged(); } - private void updateShouldFilterCacheForPackage(PackageDataSnapshot snapshot, + private void updateShouldFilterCacheForPackage(Computer snapshot, String packageName) { if (!mCacheReady) { return; @@ -744,7 +743,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } @GuardedBy("mCacheLock") - private void updateShouldFilterCacheForPackage(PackageDataSnapshot snapshot, + private void updateShouldFilterCacheForPackage(Computer snapshot, @Nullable String skipPackageName, PackageStateInternal subjectSetting, ArrayMap allSettings, UserInfo[] allUsers, int subjectUserId, int maxIndex) { @@ -771,7 +770,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } @GuardedBy("mCacheLock") - private void updateShouldFilterCacheForUser(PackageDataSnapshot snapshot, + private void updateShouldFilterCacheForUser(Computer snapshot, PackageStateInternal subjectSetting, UserInfo[] allUsers, PackageStateInternal otherSetting, int subjectUserId) { for (int ou = 0; ou < allUsers.length; ou++) { @@ -889,12 +888,12 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } /** - * Equivalent to calling {@link #addPackage(PackageDataSnapshot, PackageStateInternal, boolean)} + * Equivalent to calling {@link #addPackage(Computer, PackageStateInternal, boolean)} * with {@code isReplace} equal to {@code false}. * - * @see AppsFilterImpl#addPackage(PackageDataSnapshot, PackageStateInternal, boolean) + * @see AppsFilterImpl#addPackage(Computer, PackageStateInternal, boolean) */ - public void addPackage(PackageDataSnapshot snapshot, PackageStateInternal newPkgSetting) { + public void addPackage(Computer snapshot, PackageStateInternal newPkgSetting) { addPackage(snapshot, newPkgSetting, false /* isReplace */); } @@ -904,7 +903,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, * @param setting the setting of the package being removed. * @param isReplace if the package is being replaced. */ - public void removePackage(PackageDataSnapshot snapshot, PackageStateInternal setting, + public void removePackage(Computer snapshot, PackageStateInternal setting, boolean isReplace) { final ArraySet additionalChangedPackages; final ArrayMap settings = diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java index 5a2f6feb4d831..bf4215c1f9c7d 100644 --- a/services/core/java/com/android/server/pm/Computer.java +++ b/services/core/java/com/android/server/pm/Computer.java @@ -130,7 +130,6 @@ public interface Computer extends PackageDataSnapshot { */ ActivityInfo getActivityInfoInternal(ComponentName component, long flags, int filterCallingUid, int userId); - @Override AndroidPackage getPackage(String packageName); AndroidPackage getPackage(int uid); ApplicationInfo generateApplicationInfoFromSettings(String packageName, long flags, @@ -317,7 +316,6 @@ public interface Computer extends PackageDataSnapshot { PreferredIntentResolver getPreferredActivities(@UserIdInt int userId); @NonNull - @Override ArrayMap getPackageStates(); @Nullable @@ -644,11 +642,9 @@ public interface Computer extends PackageDataSnapshot { @NonNull List getVolumePackages(@NonNull String volumeUuid); - @Override @NonNull UserInfo[] getUserInfos(); - @Override @NonNull Collection getAllSharedUsers(); } diff --git a/services/core/java/com/android/server/pm/snapshot/PackageDataSnapshot.java b/services/core/java/com/android/server/pm/snapshot/PackageDataSnapshot.java index e1e22222ae3ed..1c646fbb6b5d9 100644 --- a/services/core/java/com/android/server/pm/snapshot/PackageDataSnapshot.java +++ b/services/core/java/com/android/server/pm/snapshot/PackageDataSnapshot.java @@ -16,22 +16,18 @@ package com.android.server.pm.snapshot; -import android.annotation.NonNull; -import android.content.pm.UserInfo; -import android.util.ArrayMap; +import android.content.pm.PackageManagerInternal; -import com.android.server.pm.SharedUserSetting; -import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.pkg.PackageStateInternal; - -import java.util.Collection; +import com.android.server.pm.Computer; +import com.android.server.pm.PackageManagerService; +/** + * An empty interface provided as the type for a snapshot of {@link PackageManagerService} data. + * There should be no members of this interface, to discourage its usage beyond as an input to + * other package related APIs. + * + * Usage inside {@link PackageManagerInternal} and related should cast the object instance to + * a {@link Computer} to access data. + */ public interface PackageDataSnapshot { - @NonNull - ArrayMap getPackageStates(); - @NonNull - UserInfo[] getUserInfos(); - @NonNull - Collection getAllSharedUsers(); - AndroidPackage getPackage(String packageName); } diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java index facbe80bde678..7d1cc3cba5d21 100644 --- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterImplTest.java @@ -56,7 +56,6 @@ import com.android.server.pm.pkg.component.ParsedInstrumentationImpl; import com.android.server.pm.pkg.component.ParsedIntentInfoImpl; import com.android.server.pm.pkg.component.ParsedProviderImpl; import com.android.server.pm.pkg.parsing.ParsingPackage; -import com.android.server.pm.snapshot.PackageDataSnapshot; import com.android.server.utils.WatchableTester; import org.junit.Before; @@ -102,7 +101,7 @@ public class AppsFilterImplTest { @Mock FeatureConfig mFeatureConfigMock; @Mock - PackageDataSnapshot mSnapshot; + Computer mSnapshot; @Mock Handler mMockHandler; @Mock