Set explicit destination for CALL_PRIVILEGED

bug:8950263
Change-Id: I8e40298a20e513012082c7e166326ed9cdaa952b

Conflicts:
	src/com/android/contacts/ContactsUtils.java
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index ca32ff8..8b4f128 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -22,7 +22,7 @@
 import com.android.contacts.model.AccountWithDataSet;
 import com.android.contacts.test.NeededForTesting;
 import com.android.contacts.util.Constants;
-
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
@@ -45,6 +45,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
@@ -270,6 +273,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;
     }