summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Patrick Baumann <patb@google.com> 2020-06-24 15:41:29 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-06-24 15:41:29 +0000
commiteef81fbe91325dd7b95f0045f9e83b96f763f230 (patch)
treeecb0bc8302c8420bb44d4e5057aaa4dc59583040
parentdbb6686ddf0dfdea3ab42b1ac5453b69da19bc0e (diff)
parenta5553b16bba2006b9191ad9ce46600473b079102 (diff)
Merge "Fixes ordering on AppsFilter#removePackage" into rvc-dev am: 910575c19c am: a5553b16bb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11973246 Change-Id: Iaeb28316145a69d2191372d0c75089a3550a5501
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java31
1 files changed, 16 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 10c9fcce12cb..b219e265072d 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -796,7 +796,6 @@ public class AppsFilter {
* @param setting the setting of the package being removed.
*/
public void removePackage(PackageSetting setting) {
- removeAppIdFromVisibilityCache(setting.appId);
mStateProvider.runWithState((settings, users) -> {
final int userCount = users.length;
for (int u = 0; u < userCount; u++) {
@@ -819,17 +818,7 @@ public class AppsFilter {
mQueriesViaPackage.remove(mQueriesViaPackage.keyAt(i), setting.appId);
}
- // re-add other shared user members to re-establish visibility between them and other
- // packages
- if (setting.sharedUser != null) {
- for (int i = setting.sharedUser.packages.size() - 1; i >= 0; i--) {
- if (setting.sharedUser.packages.valueAt(i) == setting) {
- continue;
- }
- addPackageInternal(
- setting.sharedUser.packages.valueAt(i), settings);
- }
- }
+ mForceQueryable.remove(setting.appId);
if (setting.pkg != null && !setting.pkg.getProtectedBroadcasts().isEmpty()) {
final String removingPackageName = setting.pkg.getPackageName();
@@ -843,6 +832,21 @@ public class AppsFilter {
mOverlayReferenceMapper.removePkg(setting.name);
mFeatureConfig.updatePackageState(setting, true /*removed*/);
+ // After removing all traces of the package, if it's part of a shared user, re-add other
+ // shared user members to re-establish visibility between them and other packages.
+ // NOTE: this must come after all removals from data structures but before we update the
+ // cache
+ if (setting.sharedUser != null) {
+ for (int i = setting.sharedUser.packages.size() - 1; i >= 0; i--) {
+ if (setting.sharedUser.packages.valueAt(i) == setting) {
+ continue;
+ }
+ addPackageInternal(
+ setting.sharedUser.packages.valueAt(i), settings);
+ }
+ }
+
+ removeAppIdFromVisibilityCache(setting.appId);
if (mShouldFilterCache != null && setting.sharedUser != null) {
for (int i = setting.sharedUser.packages.size() - 1; i >= 0; i--) {
PackageSetting siblingSetting = setting.sharedUser.packages.valueAt(i);
@@ -854,9 +858,6 @@ public class AppsFilter {
}
}
});
- mForceQueryable.remove(setting.appId);
-
-
}
/**