diff --git a/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java b/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
index f69df9d..138a1dc 100644
--- a/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
+++ b/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
@@ -23,21 +23,17 @@
  * Action callbacks that can be sent by a phone number picker.
  */
 public interface OnPhoneNumberPickerActionListener  {
+    public static final int CALL_INITIATION_UNKNOWN = 0;
 
     /**
      * Returns the selected phone number to the requester.
      */
-    void onPickPhoneNumberAction(Uri dataUri);
-
-    /**
-     * Calls the specified phone number audio call.
-     */
-    void onCallNumberDirectly(String phoneNumber);
+    void onPickPhoneNumberAction(Uri dataUri, int callInitiationType);
 
     /**
      * Calls the specified phone number, either as an audio or video call.
      */
-    void onCallNumberDirectly(String phoneNumber, boolean isVideoCall);
+    void onCallNumberDirectly(String phoneNumber, boolean isVideoCall, int callInitiationType);
 
     /**
      * Returns the selected number as a shortcut intent.
diff --git a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
index 7f98fde..43f7ade 100644
--- a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
@@ -196,7 +196,8 @@
             final String number = getPhoneNumber(position);
             if (!TextUtils.isEmpty(number)) {
                 cacheContactInfo(position);
-                mListener.onCallNumberDirectly(number);
+                mListener.onCallNumberDirectly(number, false /* isVideoCall */,
+                        getCallInitiationType(true /* isRemoteDirectory */));
             } else {
                 Log.w(TAG, "Item at " + position + " was clicked before"
                         + " adapter is ready. Ignoring");
@@ -286,7 +287,8 @@
 
     public void pickPhoneNumber(Uri uri) {
         if (mShortcutAction == null) {
-            mListener.onPickPhoneNumberAction(uri);
+            mListener.onPickPhoneNumberAction(uri,
+                    getCallInitiationType(false /* isRemoteDirectory */));
         } else {
             startPhoneNumberShortcutIntent(uri);
         }
@@ -297,13 +299,15 @@
         builder.createPhoneNumberShortcutIntent(uri, mShortcutAction);
     }
 
+    @Override
     public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
         mListener.onShortcutIntentCreated(shortcutIntent);
     }
 
     @Override
     public void onPickerResult(Intent data) {
-        mListener.onPickPhoneNumberAction(data.getData());
+        mListener.onPickPhoneNumberAction(data.getData(),
+                getCallInitiationType(false /* isRemoteDirectory */));
     }
 
     @Override
@@ -345,6 +349,14 @@
     }
 
     /**
+     * @param isRemoteDirectory {@code true} if the call was initiated using a contact/phone number
+     *         not in the local contacts database
+     */
+    protected int getCallInitiationType(boolean isRemoteDirectory) {
+        return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
+    }
+
+    /**
      * Where a lookup key contains analytic event information, logs the associated analytics event.
      *
      * @param lookupKey The lookup key JSON object.
