From 79e2bf90c388fc7abedb9f31c6c284dfd48726ca Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Fri, 1 Sep 2017 15:17:05 -0700 Subject: [PATCH] Prevent INTERACT_ACROSS_USERS exception in DefaultDialerManager. When TelecomManager methods perform a read phonestate check from a work profile user, it is possible to get an INTERACT_ACROSS_USERS exception. This is due to the fact that the filterByIntent method was not calling queryIntentActivitiesAsUser. Test: Manual Bug: 31304557 Merged-In: I6bc7419ba260050281d83e33f7f328ec5ccb3cd8 Change-Id: I2a1869162e5a52aed986a99cc378a6c630af4a70 --- telecomm/java/android/telecom/DefaultDialerManager.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java index cd652329d9f90..2a707c91ebe40 100644 --- a/telecomm/java/android/telecom/DefaultDialerManager.java +++ b/telecomm/java/android/telecom/DefaultDialerManager.java @@ -170,7 +170,7 @@ public class DefaultDialerManager { final Intent dialIntentWithTelScheme = new Intent(Intent.ACTION_DIAL); dialIntentWithTelScheme.setData(Uri.fromParts(PhoneAccount.SCHEME_TEL, "", null)); - return filterByIntent(context, packageNames, dialIntentWithTelScheme); + return filterByIntent(context, packageNames, dialIntentWithTelScheme, userId); } public static List getInstalledDialerApplications(Context context) { @@ -204,17 +204,18 @@ public class DefaultDialerManager { * * @param context A valid context * @param packageNames List of package names to filter. + * @param userId The UserId * @return The filtered list. */ private static List filterByIntent(Context context, List packageNames, - Intent intent) { + Intent intent, int userId) { if (packageNames == null || packageNames.isEmpty()) { return new ArrayList<>(); } final List result = new ArrayList<>(); final List resolveInfoList = context.getPackageManager() - .queryIntentActivities(intent, 0); + .queryIntentActivitiesAsUser(intent, 0, userId); final int length = resolveInfoList.size(); for (int i = 0; i < length; i++) { final ActivityInfo info = resolveInfoList.get(i).activityInfo;