summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hai Zhang <zhanghai@google.com> 2019-01-30 15:34:45 -0800
committer Hai Zhang <zhanghai@google.com> 2019-01-30 16:37:33 -0800
commitb73ec01a17bd26e3f403b09aa77f41edc7feec67 (patch)
treea56da6d4e68c5b03ed2d116e22e6f27b01f237c7
parentbcd8465a77fa7da209b450565e7e5d15937b78eb (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.java34
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);