Removes existing one when apply a default preferred app
Preferred apps are currently parsed from preferred-xml in different partitions. Always removes existing one when apply default preferred activity to resolve possible conflicts in different preferred-xml files. Bug: 141254650 Test: Push a preferred-xml including a confict to another partition Change-Id: I5f8bffeaa653ed9b5a5f22c99b8ef6ae0df47493
This commit is contained in:
@@ -19885,7 +19885,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final PreferredIntentResolver pir = mSettings.editPreferredActivitiesLPw(userId);
|
||||
final ArrayList<PreferredActivity> 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);
|
||||
@@ -19986,7 +19986,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
}
|
||||
if (existing != null) {
|
||||
removeFiltersLocked(pir, filter, existing);
|
||||
mSettings.removeFiltersLPw(pir, filter, existing);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19994,22 +19994,6 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
"Replacing preferred", false);
|
||||
}
|
||||
|
||||
private void removeFiltersLocked(@NonNull PreferredIntentResolver pir,
|
||||
@NonNull IntentFilter filter, @NonNull List<PreferredActivity> 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();
|
||||
|
||||
@@ -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<PreferredActivity> 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<PreferredActivity> 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 ");
|
||||
|
||||
Reference in New Issue
Block a user