summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2022-12-10 23:44:52 -0800
committer Hai Zhang <zhanghai@google.com> 2022-12-10 23:44:52 -0800
commit91df4587a045d56a477e7138afe90ab8dc8c1de5 (patch)
treeb0dc6cf582577c4de85032b72c6cbe61734da04b
parent4a51535c33de7c812a6ac35c947243945ff70682 (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
-rw-r--r--services/core/java/com/android/server/pm/Computer.java3
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java10
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerLocal.java10
-rw-r--r--services/core/java/com/android/server/pm/Settings.java4
-rw-r--r--services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java17
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;
}
}