diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9f78f0f08fd1a..89e0393f02f8b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -19867,7 +19867,7 @@ public class PackageManagerService extends IPackageManager.Stub final PreferredIntentResolver pir = mSettings.editPreferredActivitiesLPw(userId); final ArrayList existing = pir.findFilters(filter); if (removeExisting && existing != null) { - removeFiltersLocked(pir, filter, existing); + mSettings.removeFiltersLPw(pir, filter, existing); } pir.addFilter(new PreferredActivity(filter, match, set, activity, always)); scheduleWritePackageRestrictionsLocked(userId); @@ -19968,7 +19968,7 @@ public class PackageManagerService extends IPackageManager.Stub } } if (existing != null) { - removeFiltersLocked(pir, filter, existing); + mSettings.removeFiltersLPw(pir, filter, existing); } } } @@ -19976,22 +19976,6 @@ public class PackageManagerService extends IPackageManager.Stub "Replacing preferred", false); } - private void removeFiltersLocked(@NonNull PreferredIntentResolver pir, - @NonNull IntentFilter filter, @NonNull List existing) { - if (DEBUG_PREFERRED) { - Slog.i(TAG, existing.size() + " preferred matches for:"); - filter.dump(new LogPrinter(Log.INFO, TAG), " "); - } - for (int i = existing.size() - 1; i >= 0; --i) { - final PreferredActivity pa = existing.get(i); - if (DEBUG_PREFERRED) { - Slog.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":"); - pa.dump(new LogPrinter(Log.INFO, TAG), " "); - } - pir.removeFilter(pa); - } - } - @Override public void clearPackagePreferredActivities(String packageName) { final int callingUid = Binder.getCallingUid(); diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 659e2a32e2674..bd8d0c820c5c3 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -102,7 +102,6 @@ import com.android.internal.util.XmlUtils; import com.android.permission.persistence.RuntimePermissionsPersistence; import com.android.permission.persistence.RuntimePermissionsState; import com.android.server.LocalServices; -import com.android.server.pm.Installer.Batch; import com.android.server.pm.Installer.InstallerException; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; @@ -3192,6 +3191,22 @@ public final class Settings { } } + void removeFiltersLPw(@NonNull PreferredIntentResolver pir, + @NonNull IntentFilter filter, @NonNull List existing) { + if (PackageManagerService.DEBUG_PREFERRED) { + Slog.i(TAG, existing.size() + " preferred matches for:"); + filter.dump(new LogPrinter(Log.INFO, TAG), " "); + } + for (int i = existing.size() - 1; i >= 0; --i) { + final PreferredActivity pa = existing.get(i); + if (PackageManagerService.DEBUG_PREFERRED) { + Slog.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":"); + pa.dump(new LogPrinter(Log.INFO, TAG), " "); + } + pir.removeFilter(pa); + } + } + private void applyDefaultPreferredActivityLPw( PackageManagerInternal pmInternal, IntentFilter tmpPa, ComponentName cn, int userId) { // The initial preferences only specify the target activity @@ -3395,8 +3410,13 @@ public final class Settings { Slog.w(TAG, "Malformed mimetype " + intent.getType() + " for " + cn); } } + final PreferredIntentResolver pir = editPreferredActivitiesLPw(userId); + final List existing = pir.findFilters(filter); + if (existing != null) { + removeFiltersLPw(pir, filter, existing); + } PreferredActivity pa = new PreferredActivity(filter, systemMatch, set, cn, true); - editPreferredActivitiesLPw(userId).addFilter(pa); + pir.addFilter(pa); } else if (haveNonSys == null) { StringBuilder sb = new StringBuilder(); sb.append("No component ");