diff options
author | Christopher Tate <ctate@google.com> | 2013-11-13 12:14:29 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-11-13 12:14:29 -0800 |
commit | 87b84ca6fc5070f2fbbb5f6d94863680b33d188b (patch) | |
tree | 80f2e08a1bed79982af02a1fd13a3dd176cccc22 /services/java/com/android/server | |
parent | 086034117d9214de6339a29b93412276eb00afea (diff) | |
parent | e995ad1559ac12a0ac5e2e56ce378b0b29f10f24 (diff) | |
download | frameworks_base-87b84ca6fc5070f2fbbb5f6d94863680b33d188b.zip frameworks_base-87b84ca6fc5070f2fbbb5f6d94863680b33d188b.tar.gz frameworks_base-87b84ca6fc5070f2fbbb5f6d94863680b33d188b.tar.bz2 |
am e995ad15: am 0b2c2b10: Merge "Support preferred activities with zero or one scheme in the filter" into klp-dev
* commit 'e995ad1559ac12a0ac5e2e56ce378b0b29f10f24':
Support preferred activities with zero or one scheme in the filter
Diffstat (limited to 'services/java/com/android/server')
-rwxr-xr-x | services/java/com/android/server/pm/PackageManagerService.java | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 5af25c6..841a531 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -10011,11 +10011,11 @@ public class PackageManagerService extends IPackageManager.Stub { } if (filter.countDataAuthorities() != 0 || filter.countDataPaths() != 0 - || filter.countDataSchemes() != 0 + || filter.countDataSchemes() > 1 || filter.countDataTypes() != 0) { throw new IllegalArgumentException( "replacePreferredActivity expects filter to have no data authorities, " + - "paths, schemes or types."); + "paths, or types; and at most one scheme."); } synchronized (mPackages) { if (mContext.checkCallingOrSelfPermission( @@ -10032,33 +10032,27 @@ public class PackageManagerService extends IPackageManager.Stub { } final int callingUserId = UserHandle.getCallingUserId(); - ArrayList<PreferredActivity> removed = null; PreferredIntentResolver pir = mSettings.mPreferredActivities.get(callingUserId); if (pir != null) { - Iterator<PreferredActivity> it = pir.filterIterator(); - String action = filter.getAction(0); - String category = filter.getCategory(0); - while (it.hasNext()) { - PreferredActivity pa = it.next(); - if ((pa.countActions() == 0) || (pa.countCategories() == 0) - || (pa.getAction(0).equals(action) - && pa.getCategory(0).equals(category))) { - if (removed == null) { - removed = new ArrayList<PreferredActivity>(); - } - removed.add(pa); - if (DEBUG_PREFERRED) { - Slog.i(TAG, "Removing preferred activity " - + pa.mPref.mComponent + ":"); - filter.dump(new LogPrinter(Log.INFO, TAG), " "); - } - } - } - if (removed != null) { - for (int i=0; i<removed.size(); i++) { - PreferredActivity pa = removed.get(i); - pir.removeFilter(pa); + Intent intent = new Intent(filter.getAction(0)).addCategory(filter.getCategory(0)); + if (filter.countDataSchemes() == 1) { + Uri.Builder builder = new Uri.Builder(); + builder.scheme(filter.getDataScheme(0)); + intent.setData(builder.build()); + } + List<PreferredActivity> matches = pir.queryIntent( + intent, null, true, callingUserId); + if (DEBUG_PREFERRED) { + Slog.i(TAG, matches.size() + " preferred matches for " + intent); + } + for (int i = 0; i < matches.size(); i++) { + PreferredActivity pa = matches.get(i); + if (DEBUG_PREFERRED) { + Slog.i(TAG, "Removing preferred activity " + + pa.mPref.mComponent + ":"); + filter.dump(new LogPrinter(Log.INFO, TAG), " "); } + pir.removeFilter(pa); } } addPreferredActivityInternal(filter, match, set, activity, true, callingUserId); |