Set explicit destination for CALL_PRIVILEGED

bug:8950263
Change-Id: I8e40298a20e513012082c7e166326ed9cdaa952b
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 05eb4f6..1e51aae 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
@@ -46,6 +47,9 @@
     private static final String TAG = "ContactsUtils";
     private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
 
+    private static final ComponentName CALL_INTENT_DESTINATION = new ComponentName(
+            "com.android.phone", "com.android.phone.PrivilegedOutgoingCallBroadcaster");
+
     private static int sThumbnailSize = -1;
 
     // TODO find a proper place for the canonical version of these
@@ -268,6 +272,12 @@
         if (callOrigin != null) {
             intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN, callOrigin);
         }
+
+        // Set phone as an explicit component of CALL_PRIVILEGED intent.
+        // Setting destination explicitly prevents other apps from capturing this Intent since,
+        // unlike SendBroadcast, there is no API for specifying a permission on startActivity.
+        intent.setComponent(CALL_INTENT_DESTINATION);
+
         return intent;
     }