diff options
| author | 2019-05-23 20:38:36 +0000 | |
|---|---|---|
| committer | 2019-05-23 20:38:36 +0000 | |
| commit | c3c75a49eaed143e7258729830b8d2e28826624b (patch) | |
| tree | 9bbdb42dc2f16078ec31326136b522e85510f73e | |
| parent | a578ecce46981fb60cb68dc95b1f5275bcea08f0 (diff) | |
| parent | eb8b460c8f63b106ffae254ab51310c9be6c3e0c (diff) | |
Merge "Exclude packages that's not installed from the hash for role." into qt-dev
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()); } |