summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author bkchoi <bkchoi@google.com> 2022-07-11 13:19:05 -0700
committer BK Choi <bkchoi@google.com> 2022-07-27 21:36:03 +0000
commitcb2ba4bd13a0bb4c0aed62001c2bc983eb1ce1e8 (patch)
tree4cf3d57dc5e6badefdee5beb23f35eb27f34f83a
parent20066b4982daea2e3e2666afff424d2920c07aab (diff)
Fix a bug in UserSystemPackageInstaller#installWhitelistedSystemPackages
When userWhitelist was not null, it only mutated the packages in userWhitelist, and other packages left untouched. The correct behavior is to iterate all packages and install or uninstall according to userWhitelist. BYPASS_INCLUSIVE_LANGUAGE_REASON=existing code that cannot be changed Fixes: 234877652 Test: atest UserSystemPackageInstallerTest Test: Manual test with gcar_emu_x86_64 emulator (cherry picked from commit 2fce0901463af17ebfdb557d01b41cc5e4e97ecf) Merged-In: I4325565d8acaeffd4aab5a4b6295d325edb738a9 Change-Id: I4325565d8acaeffd4aab5a4b6295d325edb738a9
-rw-r--r--services/core/java/com/android/server/pm/UserSystemPackageInstaller.java45
1 files changed, 14 insertions, 31 deletions
diff --git a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
index 60864a37ef45..dfb4f2425ba7 100644
--- a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
+++ b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
@@ -219,38 +219,21 @@ class UserSystemPackageInstaller {
// Install/uninstall system packages per user.
for (int userId : mUm.getUserIds()) {
- final Set<String> userWhitelist = getInstallablePackagesForUserId(userId);
-
- // If null, run for all packages
- if (userWhitelist == null) {
- pmInt.forEachPackageState(packageState -> {
- if (packageState.getPkg() == null) {
- return;
- }
- final boolean install = !packageState.getTransientState()
- .isHiddenUntilInstalled();
- if (packageState.getUserStateOrDefault(userId).isInstalled() != install
- && shouldChangeInstallationState(packageState, install, userId,
- isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
- changesToCommit.add(userId, packageState.getPackageName(), install);
- }
- });
- } else {
- for (String packageName : userWhitelist) {
- PackageStateInternal packageState = pmInt.getPackageStateInternal(packageName);
- if (packageState.getPkg() == null) {
- continue;
- }
-
- final boolean install = !packageState.getTransientState()
- .isHiddenUntilInstalled();
- if (packageState.getUserStateOrDefault(userId).isInstalled() != install
- && shouldChangeInstallationState(packageState, install, userId,
- isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
- changesToCommit.add(userId, packageState.getPackageName(), install);
- }
+ final Set<String> userAllowlist = getInstallablePackagesForUserId(userId);
+
+ pmInt.forEachPackageState(packageState -> {
+ if (packageState.getPkg() == null) {
+ return;
}
- }
+ boolean install = (userAllowlist == null
+ || userAllowlist.contains(packageState.getPackageName()))
+ && !packageState.getTransientState().isHiddenUntilInstalled();
+ if (packageState.getUserStateOrDefault(userId).isInstalled() != install
+ && shouldChangeInstallationState(packageState, install, userId,
+ isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
+ changesToCommit.add(userId, packageState.getPackageName(), install);
+ }
+ });
}
pmInt.commitPackageStateMutation(null, packageStateMutator -> {