summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java16
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java4
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) {