Merge "Use TelecomManager#placeCall to call from Emergency Info screen." into pi-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d6aff15..74daafe 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -18,6 +18,7 @@
     android:sharedUserId="com.android.emergency.uid">
 
     <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
 
diff --git a/src/com/android/emergency/preferences/ContactPreference.java b/src/com/android/emergency/preferences/ContactPreference.java
index 8ef58c4..ff5e3cc 100644
--- a/src/com/android/emergency/preferences/ContactPreference.java
+++ b/src/com/android/emergency/preferences/ContactPreference.java
@@ -32,6 +32,7 @@
 import android.support.annotation.Nullable;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceViewHolder;
+import android.telecom.TelecomManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
 import android.util.AttributeSet;
@@ -219,19 +220,11 @@
      * Calls the contact.
      */
     public void callContact() {
-        Intent callIntent =
-                new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + mContact.getPhoneNumber()));
-        PackageManager packageManager = getContext().getPackageManager();
-        List<ResolveInfo> infos =
-                packageManager.queryIntentActivities(callIntent, PackageManager.MATCH_SYSTEM_ONLY);
-        if (infos == null || infos.isEmpty()) {
-            return;
-        }
-        callIntent.setComponent(new ComponentName(infos.get(0).activityInfo.packageName,
-                infos.get(0).activityInfo.name));
-
+        // Use TelecomManager to place the call; this APK has CALL_PRIVILEGED permission so it will
+        // be able to call emergency numbers.
+        TelecomManager tm = (TelecomManager) getContext().getSystemService(Context.TELECOM_SERVICE);
+        tm.placeCall(Uri.parse("tel:" + mContact.getPhoneNumber()), null);
         MetricsLogger.action(getContext(), MetricsEvent.ACTION_CALL_EMERGENCY_CONTACT);
-        getContext().startActivity(callIntent);
     }
 
     /**