From 682df5bb41eed37451ddc69d3e562529a8af8b4a Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Fri, 8 Jul 2022 10:19:05 -0700 Subject: [PATCH] Forcefully convert to basic Intent before calling PM API. AIDL can't accept subclasses, see more info in the bug Bug: 238277108 Fixes: 238277108 Test: follow steps in the bug, click on share Change-Id: Ie691df4566e6b622c868bbed4377afc1ee82807d --- core/java/com/android/internal/app/ResolverListAdapter.java | 5 +++-- .../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 737d5e348249b..b32afb44852a1 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 100fcd8178126..01dcf9624ed5c 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 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 infos = mpm.queryIntentActivitiesAsUser(intent, flags, userHandle); if (infos != null) {