From 697894bbd4a7fdd8108a11231c693f552e4e2c3f Mon Sep 17 00:00:00 2001 From: Winson Chiu Date: Mon, 13 Jun 2022 16:40:46 +0000 Subject: [PATCH] Remove contents from PackageDataSnapshot This interface is designed to be an empty type provided to non-PMS callers to pass into package related APIs. It shouldn't have methods itself to discourage the access of the data manually outside of those APIs, since the caller may not be aware of how to cache and use snapshots appropriately. Bug: 235834042 Test: atest AppsFilterImplTest Change-Id: I5e48ef006fdcb242bdcb1e6d0272c5b4e5513e11 --- .../com/android/server/pm/AppsFilterBase.java | 4 +-- .../com/android/server/pm/AppsFilterImpl.java | 27 +++++++++---------- .../java/com/android/server/pm/Computer.java | 4 --- .../pm/snapshot/PackageDataSnapshot.java | 26 ++++++++---------- .../android/server/pm/AppsFilterImplTest.java | 3 +-- 5 files changed, 27 insertions(+), 37 deletions(-) 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