diff options
| author | 2022-12-10 23:44:52 -0800 | |
|---|---|---|
| committer | 2022-12-10 23:44:52 -0800 | |
| commit | 91df4587a045d56a477e7138afe90ab8dc8c1de5 (patch) | |
| tree | b0dc6cf582577c4de85032b72c6cbe61734da04b | |
| parent | 4a51535c33de7c812a6ac35c947243945ff70682 (diff) | |
Add getDisabledSystemPackageStates() for PackageManagerLocal.
Permission needs access to the disabled system packages so that it can
verify things like <uses-permission> being declared by the APK on
system image.
Bug: 182523293
Test: presubmit
Change-Id: Ib9fb138d0481bd2fd33ab613c235b6700c415a02
5 files changed, 44 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java index 5b8ee2b085cc..60621a0eaaef 100644 --- a/services/core/java/com/android/server/pm/Computer.java +++ b/services/core/java/com/android/server/pm/Computer.java @@ -338,6 +338,9 @@ public interface Computer extends PackageDataSnapshot { @NonNull ArrayMap<String, ? extends PackageStateInternal> getPackageStates(); + @NonNull + ArrayMap<String, ? extends PackageStateInternal> getDisabledSystemPackageStates(); + @Nullable String getRenamedPackage(@NonNull String packageName); diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 45b633f02e50..b8fba51c4d60 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -185,6 +185,10 @@ public class ComputerEngine implements Computer { return mSettings.getPackagesLocked().untrackedStorage(); } + public ArrayMap<String, ? extends PackageStateInternal> getDisabledSystemPackages() { + return mSettings.getDisabledSystemPackagesLocked().untrackedStorage(); + } + public Settings(@NonNull com.android.server.pm.Settings settings) { mSettings = settings; } @@ -3459,6 +3463,12 @@ public class ComputerEngine implements Computer { return mSettings.getPackages(); } + @NonNull + @Override + public ArrayMap<String, ? extends PackageStateInternal> getDisabledSystemPackageStates() { + return mSettings.getDisabledSystemPackages(); + } + @Nullable @Override public String getRenamedPackage(@NonNull String packageName) { diff --git a/services/core/java/com/android/server/pm/PackageManagerLocal.java b/services/core/java/com/android/server/pm/PackageManagerLocal.java index d163d3d7a085..935c4ddd2597 100644 --- a/services/core/java/com/android/server/pm/PackageManagerLocal.java +++ b/services/core/java/com/android/server/pm/PackageManagerLocal.java @@ -149,6 +149,16 @@ public interface PackageManagerLocal { @NonNull Map<String, PackageState> getPackageStates(); + /** + * Returns a map of all disabled system {@link PackageState PackageStates} on the device. + * + * @return Mapping of package name to disabled system {@link PackageState}. + * + * @hide Pending API + */ + @NonNull + Map<String, PackageState> getDisabledSystemPackageStates(); + @Override void close(); } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 89b74f400919..01dee132a324 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -819,6 +819,10 @@ public final class Settings implements Watchable, Snappable { return mPackages; } + WatchedArrayMap<String, PackageSetting> getDisabledSystemPackagesLocked() { + return mDisabledSysPackages; + } + KeySetManagerService getKeySetManagerService() { return mKeySetManagerService; } diff --git a/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java b/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java index f8e154755cff..4e0a11d5a458 100644 --- a/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java +++ b/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java @@ -104,6 +104,9 @@ public class PackageManagerLocalImpl implements PackageManagerLocal { @Nullable private Map<String, PackageState> mCachedUnmodifiablePackageStates; + @Nullable + private Map<String, PackageState> mCachedUnmodifiableDisabledSystemPackageStates; + private UnfilteredSnapshotImpl(@NonNull PackageDataSnapshot snapshot) { super(snapshot); } @@ -126,10 +129,24 @@ public class PackageManagerLocalImpl implements PackageManagerLocal { return mCachedUnmodifiablePackageStates; } + @SuppressWarnings("RedundantSuppression") + @NonNull + @Override + public Map<String, PackageState> getDisabledSystemPackageStates() { + checkClosed(); + + if (mCachedUnmodifiableDisabledSystemPackageStates == null) { + mCachedUnmodifiableDisabledSystemPackageStates = + Collections.unmodifiableMap(mSnapshot.getDisabledSystemPackageStates()); + } + return mCachedUnmodifiableDisabledSystemPackageStates; + } + @Override public void close() { super.close(); mCachedUnmodifiablePackageStates = null; + mCachedUnmodifiableDisabledSystemPackageStates = null; } } |