Loading core/java/android/app/ApplicationContext.java +10 −0 Original line number Diff line number Diff line Loading @@ -2440,6 +2440,16 @@ class ApplicationContext extends Context { } } @Override public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { try { mPM.replacePreferredActivity(filter, match, set, activity); } catch (RemoteException e) { // Should never happen! } } @Override public void clearPackagePreferredActivities(String packageName) { try { Loading core/java/android/content/pm/IPackageManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -168,7 +168,12 @@ interface IPackageManager { void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); void replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); void clearPackagePreferredActivities(String packageName); int getPreferredActivities(out List<IntentFilter> outFilters, out List<ComponentName> outActivities, String packageName); Loading core/java/android/content/pm/PackageManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -1627,6 +1627,26 @@ public abstract class PackageManager { public abstract void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); /** * Replaces an existing preferred activity mapping to the system, and if that were not present * adds a new preferred activity. This will be used * to automatically select the given activity component when * {@link Context#startActivity(Intent) Context.startActivity()} finds * multiple matching activities and also matches the given filter. * * @param filter The set of intents under which this activity will be * made preferred. * @param match The IntentFilter match category that this preference * applies to. * @param set The set of activities that the user was picking from when * this preference was made. * @param activity The component name of the activity that is to be * preferred. * @hide */ public abstract void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); /** * Remove all preferred activity mappings, previously added with * {@link #addPreferredActivity}, from the Loading services/java/com/android/server/PackageManagerService.java +37 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server; import com.android.internal.app.ResolverActivity; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; import com.android.server.PackageManagerService.PreferredActivity; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -4510,6 +4511,42 @@ class PackageManagerService extends IPackageManager.Stub { } } public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null); if (filter.countActions() != 1) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have only 1 action."); } if (filter.countCategories() != 1) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have only 1 category."); } if (filter.countDataAuthorities() != 0 || filter.countDataPaths() != 0 || filter.countDataSchemes() != 0 || filter.countDataTypes() != 0) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have no data authorities, " + "paths, schemes or types."); } synchronized (mPackages) { Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator(); String action = filter.getAction(0); String category = filter.getCategory(0); while (it.hasNext()) { PreferredActivity pa = it.next(); if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) { it.remove(); Log.i(TAG, "Removed preferred activity " + pa.mActivity + ":"); filter.dump(new LogPrinter(Log.INFO, TAG), " "); } } addPreferredActivity(filter, match, set, activity); } } public void clearPackagePreferredActivities(String packageName) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null); Loading test-runner/android/test/mock/MockPackageManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -389,6 +389,16 @@ public class MockPackageManager extends PackageManager { throw new UnsupportedOperationException(); } /** * @hide - to match hiding in superclass */ @Override public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { throw new UnsupportedOperationException(); } @Override public void clearPackagePreferredActivities(String packageName) { throw new UnsupportedOperationException(); Loading Loading
core/java/android/app/ApplicationContext.java +10 −0 Original line number Diff line number Diff line Loading @@ -2440,6 +2440,16 @@ class ApplicationContext extends Context { } } @Override public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { try { mPM.replacePreferredActivity(filter, match, set, activity); } catch (RemoteException e) { // Should never happen! } } @Override public void clearPackagePreferredActivities(String packageName) { try { Loading
core/java/android/content/pm/IPackageManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -168,7 +168,12 @@ interface IPackageManager { void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); void replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity); void clearPackagePreferredActivities(String packageName); int getPreferredActivities(out List<IntentFilter> outFilters, out List<ComponentName> outActivities, String packageName); Loading
core/java/android/content/pm/PackageManager.java +20 −0 Original line number Diff line number Diff line Loading @@ -1627,6 +1627,26 @@ public abstract class PackageManager { public abstract void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); /** * Replaces an existing preferred activity mapping to the system, and if that were not present * adds a new preferred activity. This will be used * to automatically select the given activity component when * {@link Context#startActivity(Intent) Context.startActivity()} finds * multiple matching activities and also matches the given filter. * * @param filter The set of intents under which this activity will be * made preferred. * @param match The IntentFilter match category that this preference * applies to. * @param set The set of activities that the user was picking from when * this preference was made. * @param activity The component name of the activity that is to be * preferred. * @hide */ public abstract void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity); /** * Remove all preferred activity mappings, previously added with * {@link #addPreferredActivity}, from the Loading
services/java/com/android/server/PackageManagerService.java +37 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server; import com.android.internal.app.ResolverActivity; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; import com.android.server.PackageManagerService.PreferredActivity; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -4510,6 +4511,42 @@ class PackageManagerService extends IPackageManager.Stub { } } public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null); if (filter.countActions() != 1) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have only 1 action."); } if (filter.countCategories() != 1) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have only 1 category."); } if (filter.countDataAuthorities() != 0 || filter.countDataPaths() != 0 || filter.countDataSchemes() != 0 || filter.countDataTypes() != 0) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have no data authorities, " + "paths, schemes or types."); } synchronized (mPackages) { Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator(); String action = filter.getAction(0); String category = filter.getCategory(0); while (it.hasNext()) { PreferredActivity pa = it.next(); if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) { it.remove(); Log.i(TAG, "Removed preferred activity " + pa.mActivity + ":"); filter.dump(new LogPrinter(Log.INFO, TAG), " "); } } addPreferredActivity(filter, match, set, activity); } } public void clearPackagePreferredActivities(String packageName) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null); Loading
test-runner/android/test/mock/MockPackageManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -389,6 +389,16 @@ public class MockPackageManager extends PackageManager { throw new UnsupportedOperationException(); } /** * @hide - to match hiding in superclass */ @Override public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) { throw new UnsupportedOperationException(); } @Override public void clearPackagePreferredActivities(String packageName) { throw new UnsupportedOperationException(); Loading