summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2019-05-23 20:38:36 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-05-23 20:38:36 +0000
commitc3c75a49eaed143e7258729830b8d2e28826624b (patch)
tree9bbdb42dc2f16078ec31326136b522e85510f73e
parenta578ecce46981fb60cb68dc95b1f5275bcea08f0 (diff)
parenteb8b460c8f63b106ffae254ab51310c9be6c3e0c (diff)
Merge "Exclude packages that's not installed from the hash for role." into qt-dev
-rw-r--r--core/java/android/content/pm/PackageManagerInternal.java7
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java21
-rw-r--r--services/core/java/com/android/server/role/RoleManagerService.java5
3 files changed, 31 insertions, 2 deletions
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index 5a69e6bdef30..376a211dbc7d 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -844,6 +844,13 @@ public abstract class PackageManagerInternal {
*/
public abstract void forEachPackage(Consumer<PackageParser.Package> actionLocked);
+ /**
+ * Perform the given action for each installed package for a user.
+ * Note that packages lock will be held while performin the actions.
+ */
+ public abstract void forEachInstalledPackage(
+ @NonNull Consumer<PackageParser.Package> actionLocked, @UserIdInt int userId);
+
/** Returns the list of enabled components */
public abstract ArraySet<String> getEnabledComponents(String packageName, int userId);
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e86f56f90cb4..719e166d5b98 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -24784,6 +24784,12 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
+ public void forEachInstalledPackage(@NonNull Consumer<PackageParser.Package> actionLocked,
+ @UserIdInt int userId) {
+ PackageManagerService.this.forEachInstalledPackage(actionLocked, userId);
+ }
+
+ @Override
public ArraySet<String> getEnabledComponents(String packageName, int userId) {
synchronized (mPackages) {
PackageSetting setting = mSettings.getPackageLPr(packageName);
@@ -25075,6 +25081,21 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
+ void forEachInstalledPackage(@NonNull Consumer<PackageParser.Package> actionLocked,
+ @UserIdInt int userId) {
+ synchronized (mPackages) {
+ int numPackages = mPackages.size();
+ for (int i = 0; i < numPackages; i++) {
+ PackageParser.Package pkg = mPackages.valueAt(i);
+ PackageSetting setting = mSettings.getPackageLPr(pkg.packageName);
+ if (setting == null || !setting.getInstalled(userId)) {
+ continue;
+ }
+ actionLocked.accept(pkg);
+ }
+ }
+ }
+
private static void enforceSystemOrPhoneCaller(String tag) {
int callingUid = Binder.getCallingUid();
if (callingUid != Process.PHONE_UID && callingUid != Process.SYSTEM_UID) {
diff --git a/services/core/java/com/android/server/role/RoleManagerService.java b/services/core/java/com/android/server/role/RoleManagerService.java
index 33803b742042..9cd6b0d32793 100644
--- a/services/core/java/com/android/server/role/RoleManagerService.java
+++ b/services/core/java/com/android/server/role/RoleManagerService.java
@@ -280,7 +280,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
PackageManagerInternal pm = LocalServices.getService(PackageManagerInternal.class);
ByteArrayOutputStream out = new ByteArrayOutputStream();
- pm.forEachPackage(FunctionalUtils.uncheckExceptions(pkg -> {
+ pm.forEachInstalledPackage(FunctionalUtils.uncheckExceptions(pkg -> {
out.write(pkg.packageName.getBytes());
out.write(BitUtils.toBytes(pkg.getLongVersionCode()));
out.write(pm.getApplicationEnabledState(pkg.packageName, userId));
@@ -288,6 +288,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
ArraySet<String> enabledComponents =
pm.getEnabledComponents(pkg.packageName, userId);
int numComponents = CollectionUtils.size(enabledComponents);
+ out.write(numComponents);
for (int i = 0; i < numComponents; i++) {
out.write(enabledComponents.valueAt(i).getBytes());
}
@@ -301,7 +302,7 @@ public class RoleManagerService extends SystemService implements RoleUserState.C
for (Signature signature : pkg.mSigningDetails.signatures) {
out.write(signature.toByteArray());
}
- }));
+ }), userId);
return PackageUtils.computeSha256Digest(out.toByteArray());
}