diff options
| author | 2019-01-30 15:34:45 -0800 | |
|---|---|---|
| committer | 2019-01-30 16:37:33 -0800 | |
| commit | b73ec01a17bd26e3f403b09aa77f41edc7feec67 (patch) | |
| tree | a56da6d4e68c5b03ed2d116e22e6f27b01f237c7 | |
| parent | bcd8465a77fa7da209b450565e7e5d15937b78eb (diff) | |
Make getInstalledDialerApplications() require an InCallService.
So that the old default dialer app picker don't show apps that don't
qualify for this new requirement in dialer role.
Bug: 110557011
Test: manual
Change-Id: Iafb33c7ee0f865991822013c839890d2fe18c692
| -rw-r--r-- | telecomm/java/android/telecom/DefaultDialerManager.java | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java index b2fa5d43b7ea..ef78ea5eb855 100644 --- a/telecomm/java/android/telecom/DefaultDialerManager.java +++ b/telecomm/java/android/telecom/DefaultDialerManager.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.AsyncTask; import android.os.Binder; @@ -162,7 +163,9 @@ public class DefaultDialerManager { final Intent dialIntentWithTelScheme = new Intent(Intent.ACTION_DIAL); dialIntentWithTelScheme.setData(Uri.fromParts(PhoneAccount.SCHEME_TEL, "", null)); - return filterByIntent(context, packageNames, dialIntentWithTelScheme, userId); + packageNames = filterByIntent(context, packageNames, dialIntentWithTelScheme, userId); + packageNames = requireInCallService(packageNames, userId, context); + return packageNames; } public static List<String> getInstalledDialerApplications(Context context) { @@ -220,6 +223,35 @@ public class DefaultDialerManager { return result; } + private static List<String> requireInCallService(List<String> packageNames, int userId, + Context context) { + if (packageNames == null || packageNames.isEmpty()) { + return new ArrayList<>(); + } + + final Intent intent = new Intent(InCallService.SERVICE_INTERFACE); + final List<ResolveInfo> resolveInfoList = context.getPackageManager() + .queryIntentServicesAsUser(intent, PackageManager.GET_META_DATA, userId); + final List<String> result = new ArrayList<>(); + final int length = resolveInfoList.size(); + for (int i = 0; i < length; i++) { + final ServiceInfo info = resolveInfoList.get(i).serviceInfo; + if (info == null || info.metaData == null) { + continue; + } + if (!info.metaData.getBoolean(TelecomManager.METADATA_IN_CALL_SERVICE_UI)) { + continue; + } + if (info.metaData.getBoolean(TelecomManager.METADATA_IN_CALL_SERVICE_CAR_MODE_UI)) { + continue; + } + if (packageNames.contains(info.packageName) && !result.contains(info.packageName)) { + result.add(info.packageName); + } + } + + return result; + } private static TelecomManager getTelecomManager(Context context) { return (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE); |