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

Commit 697894bb authored by Winson Chiu's avatar Winson Chiu
Browse files

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
parent 7df9f756
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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");
+13 −14
Original line number Diff line number Diff line
@@ -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<String, ? extends PackageStateInternal> 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<String, ? extends PackageStateInternal> settings,
            UserInfo[] users,
            int subjectUserId) {
@@ -684,7 +683,7 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,

            final ArrayMap<String, AndroidPackage> packagesCache = new ArrayMap<>();
            final UserInfo[][] usersRef = new UserInfo[1][];
            final PackageDataSnapshot snapshot = pmInternal.snapshot();
            final Computer snapshot = (Computer) pmInternal.snapshot();
            final ArrayMap<String, ? extends PackageStateInternal> 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<String,
            ? extends PackageStateInternal> 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<String> additionalChangedPackages;
        final ArrayMap<String, ? extends PackageStateInternal> settings =
+0 −4
Original line number Diff line number Diff line
@@ -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<String, ? extends PackageStateInternal> getPackageStates();

    @Nullable
@@ -644,11 +642,9 @@ public interface Computer extends PackageDataSnapshot {
    @NonNull
    List<? extends PackageStateInternal> getVolumePackages(@NonNull String volumeUuid);

    @Override
    @NonNull
    UserInfo[] getUserInfos();

    @Override
    @NonNull
    Collection<SharedUserSetting> getAllSharedUsers();
}
+11 −15
Original line number Diff line number Diff line
@@ -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<String, ? extends PackageStateInternal> getPackageStates();
    @NonNull
    UserInfo[] getUserInfos();
    @NonNull
    Collection<SharedUserSetting> getAllSharedUsers();
    AndroidPackage getPackage(String packageName);
}
+1 −2
Original line number Diff line number Diff line
@@ -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