diff options
| -rw-r--r-- | core/java/com/android/internal/app/ResolverListAdapter.java | 5 | ||||
| -rw-r--r-- | core/java/com/android/internal/app/ResolverListController.java | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java index 737d5e348249..b32afb44852a 100644 --- a/core/java/com/android/internal/app/ResolverListAdapter.java +++ b/core/java/com/android/internal/app/ResolverListAdapter.java @@ -417,8 +417,9 @@ public class ResolverListAdapter extends BaseAdapter { if (ii == null) { continue; } - ActivityInfo ai = ii.resolveActivityInfo( - mPm, 0); + // Because of AIDL bug, resolveActivityInfo can't accept subclasses of Intent. + final Intent rii = (ii.getClass() == Intent.class) ? ii : new Intent(ii); + ActivityInfo ai = rii.resolveActivityInfo(mPm, 0); if (ai == null) { Log.w(TAG, "No activity found for " + ii); continue; diff --git a/core/java/com/android/internal/app/ResolverListController.java b/core/java/com/android/internal/app/ResolverListController.java index 100fcd817812..01dcf9624ed5 100644 --- a/core/java/com/android/internal/app/ResolverListController.java +++ b/core/java/com/android/internal/app/ResolverListController.java @@ -136,12 +136,15 @@ public class ResolverListController { int baseFlags) { List<ResolverActivity.ResolvedComponentInfo> resolvedComponents = null; for (int i = 0, N = intents.size(); i < N; i++) { - final Intent intent = intents.get(i); + Intent intent = intents.get(i); int flags = baseFlags; if (intent.isWebIntent() || (intent.getFlags() & Intent.FLAG_ACTIVITY_MATCH_EXTERNAL) != 0) { flags |= PackageManager.MATCH_INSTANT; } + // Because of AIDL bug, queryIntentActivitiesAsUser can't accept subclasses of Intent. + intent = (intent.getClass() == Intent.class) ? intent : new Intent( + intent); final List<ResolveInfo> infos = mpm.queryIntentActivitiesAsUser(intent, flags, userHandle); if (infos != null) { |