diff options
| author | 2020-06-24 15:41:29 +0000 | |
|---|---|---|
| committer | 2020-06-24 15:41:29 +0000 | |
| commit | eef81fbe91325dd7b95f0045f9e83b96f763f230 (patch) | |
| tree | ecb0bc8302c8420bb44d4e5057aaa4dc59583040 | |
| parent | dbb6686ddf0dfdea3ab42b1ac5453b69da19bc0e (diff) | |
| parent | a5553b16bba2006b9191ad9ce46600473b079102 (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.java | 31 |
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); - - } /** |