summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2013-11-13 12:14:29 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2013-11-13 12:14:29 -0800
commit87b84ca6fc5070f2fbbb5f6d94863680b33d188b (patch)
tree80f2e08a1bed79982af02a1fd13a3dd176cccc22 /services/java/com/android/server
parent086034117d9214de6339a29b93412276eb00afea (diff)
parente995ad1559ac12a0ac5e2e56ce378b0b29f10f24 (diff)
downloadframeworks_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-xservices/java/com/android/server/pm/PackageManagerService.java46
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);