diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/AppsFilter.java | 16 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 4 |
2 files changed, 18 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java index 8a7702efcba8..10c9fcce12cb 100644 --- a/services/core/java/com/android/server/pm/AppsFilter.java +++ b/services/core/java/com/android/server/pm/AppsFilter.java @@ -495,10 +495,15 @@ public class AppsFilter { * Adds a package that should be considered when filtering visibility between apps. * * @param newPkgSetting the new setting being added + * @param isReplace if the package is being replaced and may need extra cleanup. */ - public void addPackage(PackageSetting newPkgSetting) { + public void addPackage(PackageSetting newPkgSetting, boolean isReplace) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "filter.addPackage"); try { + if (isReplace) { + // let's first remove any prior rules for this package + removePackage(newPkgSetting); + } mStateProvider.runWithState((settings, users) -> { addPackageInternal(newPkgSetting, settings); if (mShouldFilterCache != null) { @@ -777,6 +782,15 @@ public class AppsFilter { } /** + * Equivalent to calling {@link #addPackage(PackageSetting, boolean)} with {@code isReplace} + * equal to {@code false}. + * @see AppsFilter#addPackage(PackageSetting, boolean) + */ + public void addPackage(PackageSetting newPkgSetting) { + addPackage(newPkgSetting, false /* isReplace */); + } + + /** * Removes a package for consideration when filtering visibility between apps. * * @param setting the setting of the package being removed. diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index dc7ed34fb0be..a9d3a07b4e68 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -12368,7 +12368,9 @@ public class PackageManagerService extends IPackageManager.Stub ksms.addScannedPackageLPw(pkg); mComponentResolver.addAllComponents(pkg, chatty); - mAppsFilter.addPackage(pkgSetting); + final boolean isReplace = + reconciledPkg.prepareResult != null && reconciledPkg.prepareResult.replace; + mAppsFilter.addPackage(pkgSetting, isReplace); // Don't allow ephemeral applications to define new permissions groups. if ((scanFlags & SCAN_AS_INSTANT_APP) != 0) { |