Loading core/java/android/app/ApplicationPackageManager.java +12 −2 Original line number Diff line number Diff line Loading @@ -2687,7 +2687,7 @@ public class ApplicationPackageManager extends PackageManager { public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { try { mPM.addPreferredActivity(filter, match, set, activity, getUserId()); mPM.addPreferredActivity(filter, match, set, activity, getUserId(), false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading @@ -2697,7 +2697,7 @@ public class ApplicationPackageManager extends PackageManager { public void addPreferredActivityAsUser(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, int userId) { try { mPM.addPreferredActivity(filter, match, set, activity, userId); mPM.addPreferredActivity(filter, match, set, activity, userId, false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading Loading @@ -2733,6 +2733,16 @@ public class ApplicationPackageManager extends PackageManager { } } @Override public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match, @Nullable ComponentName[] set, @NonNull ComponentName activity) { try { mPM.addPreferredActivity(filter, match, set, activity, getUserId(), true); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @Override public int getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName) { Loading core/java/android/content/pm/IPackageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ interface IPackageManager { in IntentFilter filter, int match, in ComponentName activity); void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); in ComponentName[] set, in ComponentName activity, int userId, boolean removeExisting); @UnsupportedAppUsage void replacePreferredActivity(in IntentFilter filter, int match, Loading core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -6762,6 +6762,17 @@ public abstract class PackageManager { @Deprecated public abstract void clearPackagePreferredActivities(@NonNull String packageName); /** * Same as {@link #addPreferredActivity(IntentFilter, int, ComponentName[], ComponentName)}, * but removes all existing entries that match this filter. * @hide */ public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match, @Nullable ComponentName[] set, @NonNull ComponentName activity) { throw new UnsupportedOperationException( "addUniquePreferredActivity not implemented in subclass"); } /** * Retrieve all preferred activities, previously added with * {@link #addPreferredActivity}, that are Loading core/java/com/android/internal/app/ResolverActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -1202,7 +1202,7 @@ public class ResolverActivity extends Activity implements final PackageManager pm = getPackageManager(); // Set the preferred Activity pm.addPreferredActivity(filter, bestMatch, set, intent.getComponent()); pm.addUniquePreferredActivity(filter, bestMatch, set, intent.getComponent()); if (ri.handleAllWebDataURI) { // Set default Browser if needed Loading services/core/java/com/android/server/pm/PackageManagerService.java +26 −18 Original line number Diff line number Diff line Loading @@ -6490,7 +6490,7 @@ public class PackageManagerService extends IPackageManager.Stub intent, resolvedType, flags, query, 0, false, true, false, userId); // Add the new activity as the last chosen for this filter addPreferredActivityInternal(filter, match, null, activity, false, userId, "Setting last chosen"); "Setting last chosen", false); } @Override Loading Loading @@ -19610,14 +19610,14 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, int userId) { ComponentName[] set, ComponentName activity, int userId, boolean removeExisting) { addPreferredActivityInternal(filter, match, set, activity, true, userId, "Adding preferred"); "Adding preferred", removeExisting); } private void addPreferredActivityInternal(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, boolean always, int userId, String opname) { String opname, boolean removeExisting) { // writer int callingUid = Binder.getCallingUid(); mPermissionManager.enforceCrossUserPermission(callingUid, userId, Loading Loading @@ -19645,6 +19645,10 @@ public class PackageManagerService extends IPackageManager.Stub } synchronized (mLock) { final PreferredIntentResolver pir = mSettings.editPreferredActivitiesLPw(userId); final ArrayList<PreferredActivity> existing = pir.findFilters(filter); if (removeExisting && existing != null) { removeFiltersLocked(pir, filter, existing); } pir.addFilter(new PreferredActivity(filter, match, set, activity, always)); scheduleWritePackageRestrictionsLocked(userId); } Loading Loading @@ -19744,25 +19748,29 @@ public class PackageManagerService extends IPackageManager.Stub } } if (existing != null) { removeFiltersLocked(pir, filter, existing); } } } addPreferredActivityInternal(filter, match, set, activity, true, userId, "Replacing preferred", false); } private void removeFiltersLocked(@NonNull PreferredIntentResolver pir, @NonNull IntentFilter filter, @NonNull List<PreferredActivity> existing) { if (DEBUG_PREFERRED) { Slog.i(TAG, existing.size() + " existing preferred matches for:"); 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 existing preferred activity " + pa.mPref.mComponent + ":"); Slog.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":"); pa.dump(new LogPrinter(Log.INFO, TAG), " "); } pir.removeFilter(pa); } } } } addPreferredActivityInternal(filter, match, set, activity, true, userId, "Replacing preferred"); } @Override public void clearPackagePreferredActivities(String packageName) { Loading
core/java/android/app/ApplicationPackageManager.java +12 −2 Original line number Diff line number Diff line Loading @@ -2687,7 +2687,7 @@ public class ApplicationPackageManager extends PackageManager { public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { try { mPM.addPreferredActivity(filter, match, set, activity, getUserId()); mPM.addPreferredActivity(filter, match, set, activity, getUserId(), false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading @@ -2697,7 +2697,7 @@ public class ApplicationPackageManager extends PackageManager { public void addPreferredActivityAsUser(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, int userId) { try { mPM.addPreferredActivity(filter, match, set, activity, userId); mPM.addPreferredActivity(filter, match, set, activity, userId, false); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading Loading @@ -2733,6 +2733,16 @@ public class ApplicationPackageManager extends PackageManager { } } @Override public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match, @Nullable ComponentName[] set, @NonNull ComponentName activity) { try { mPM.addPreferredActivity(filter, match, set, activity, getUserId(), true); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @Override public int getPreferredActivities(List<IntentFilter> outFilters, List<ComponentName> outActivities, String packageName) { Loading
core/java/android/content/pm/IPackageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ interface IPackageManager { in IntentFilter filter, int match, in ComponentName activity); void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); in ComponentName[] set, in ComponentName activity, int userId, boolean removeExisting); @UnsupportedAppUsage void replacePreferredActivity(in IntentFilter filter, int match, Loading
core/java/android/content/pm/PackageManager.java +11 −0 Original line number Diff line number Diff line Loading @@ -6762,6 +6762,17 @@ public abstract class PackageManager { @Deprecated public abstract void clearPackagePreferredActivities(@NonNull String packageName); /** * Same as {@link #addPreferredActivity(IntentFilter, int, ComponentName[], ComponentName)}, * but removes all existing entries that match this filter. * @hide */ public void addUniquePreferredActivity(@NonNull IntentFilter filter, int match, @Nullable ComponentName[] set, @NonNull ComponentName activity) { throw new UnsupportedOperationException( "addUniquePreferredActivity not implemented in subclass"); } /** * Retrieve all preferred activities, previously added with * {@link #addPreferredActivity}, that are Loading
core/java/com/android/internal/app/ResolverActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -1202,7 +1202,7 @@ public class ResolverActivity extends Activity implements final PackageManager pm = getPackageManager(); // Set the preferred Activity pm.addPreferredActivity(filter, bestMatch, set, intent.getComponent()); pm.addUniquePreferredActivity(filter, bestMatch, set, intent.getComponent()); if (ri.handleAllWebDataURI) { // Set default Browser if needed Loading
services/core/java/com/android/server/pm/PackageManagerService.java +26 −18 Original line number Diff line number Diff line Loading @@ -6490,7 +6490,7 @@ public class PackageManagerService extends IPackageManager.Stub intent, resolvedType, flags, query, 0, false, true, false, userId); // Add the new activity as the last chosen for this filter addPreferredActivityInternal(filter, match, null, activity, false, userId, "Setting last chosen"); "Setting last chosen", false); } @Override Loading Loading @@ -19610,14 +19610,14 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, int userId) { ComponentName[] set, ComponentName activity, int userId, boolean removeExisting) { addPreferredActivityInternal(filter, match, set, activity, true, userId, "Adding preferred"); "Adding preferred", removeExisting); } private void addPreferredActivityInternal(IntentFilter filter, int match, ComponentName[] set, ComponentName activity, boolean always, int userId, String opname) { String opname, boolean removeExisting) { // writer int callingUid = Binder.getCallingUid(); mPermissionManager.enforceCrossUserPermission(callingUid, userId, Loading Loading @@ -19645,6 +19645,10 @@ public class PackageManagerService extends IPackageManager.Stub } synchronized (mLock) { final PreferredIntentResolver pir = mSettings.editPreferredActivitiesLPw(userId); final ArrayList<PreferredActivity> existing = pir.findFilters(filter); if (removeExisting && existing != null) { removeFiltersLocked(pir, filter, existing); } pir.addFilter(new PreferredActivity(filter, match, set, activity, always)); scheduleWritePackageRestrictionsLocked(userId); } Loading Loading @@ -19744,25 +19748,29 @@ public class PackageManagerService extends IPackageManager.Stub } } if (existing != null) { removeFiltersLocked(pir, filter, existing); } } } addPreferredActivityInternal(filter, match, set, activity, true, userId, "Replacing preferred", false); } private void removeFiltersLocked(@NonNull PreferredIntentResolver pir, @NonNull IntentFilter filter, @NonNull List<PreferredActivity> existing) { if (DEBUG_PREFERRED) { Slog.i(TAG, existing.size() + " existing preferred matches for:"); 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 existing preferred activity " + pa.mPref.mComponent + ":"); Slog.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":"); pa.dump(new LogPrinter(Log.INFO, TAG), " "); } pir.removeFilter(pa); } } } } addPreferredActivityInternal(filter, match, set, activity, true, userId, "Replacing preferred"); } @Override public void clearPackagePreferredActivities(String packageName) {