Add shortcut for creating new contact with number.

Add a shortcut in the search fragment for "Create new contact" which
opens the compact editor with the entered phone number populated as
the main phone number.

Bug: 19372539
Change-Id: I9ccb462f399e3fab77c2d8ad536dbd0bd0e23609
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 07460ec..fb424e9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -502,6 +502,10 @@
         <xliff:g id="number">%s</xliff:g>
     </string>
 
+    <!-- Shortcut item used to add a number directly to a new contact from search.
+         [CHAR LIMIT=40] -->
+    <string name="search_shortcut_create_new_contact">Create new contact</string>
+
     <!-- Shortcut item used to add a number to an existing contact directly from search.
          [CHAR LIMIT=40] -->
     <string name="search_shortcut_add_to_existing_contact">Add to existing contact</string>
diff --git a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
index 0899372..f5d8ee0 100644
--- a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
+++ b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
@@ -27,11 +27,12 @@
 
     public final static int SHORTCUT_INVALID = -1;
     public final static int SHORTCUT_DIRECT_CALL = 0;
-    public final static int SHORTCUT_ADD_TO_EXISTING_CONTACT = 1;
-    public final static int SHORTCUT_SEND_SMS_MESSAGE = 2;
-    public final static int SHORTCUT_MAKE_VIDEO_CALL = 3;
+    public final static int SHORTCUT_CREATE_NEW_CONTACT = 1;
+    public final static int SHORTCUT_ADD_TO_EXISTING_CONTACT = 2;
+    public final static int SHORTCUT_SEND_SMS_MESSAGE = 3;
+    public final static int SHORTCUT_MAKE_VIDEO_CALL = 4;
 
-    public final static int SHORTCUT_COUNT = 4;
+    public final static int SHORTCUT_COUNT = 5;
 
     private final boolean[] mShortcutEnabled = new boolean[SHORTCUT_COUNT];
 
@@ -143,6 +144,10 @@
                 text = resources.getString(R.string.search_shortcut_call_number, number);
                 drawableId = R.drawable.ic_search_phone;
                 break;
+            case SHORTCUT_CREATE_NEW_CONTACT:
+                text = resources.getString(R.string.search_shortcut_create_new_contact);
+                drawableId = R.drawable.ic_search_add_contact;
+                break;
             case SHORTCUT_ADD_TO_EXISTING_CONTACT:
                 text = resources.getString(R.string.search_shortcut_add_to_existing_contact);
                 drawableId = R.drawable.ic_person_24dp;
diff --git a/src/com/android/dialer/list/RegularSearchListAdapter.java b/src/com/android/dialer/list/RegularSearchListAdapter.java
index 87d4fd2..722dc2e 100644
--- a/src/com/android/dialer/list/RegularSearchListAdapter.java
+++ b/src/com/android/dialer/list/RegularSearchListAdapter.java
@@ -69,6 +69,7 @@
         final boolean showNumberShortcuts = !TextUtils.isEmpty(getFormattedQueryString());
         boolean changed = false;
         changed |= setShortcutEnabled(SHORTCUT_DIRECT_CALL, showNumberShortcuts);
+        changed |= setShortcutEnabled(SHORTCUT_CREATE_NEW_CONTACT, showNumberShortcuts);
         changed |= setShortcutEnabled(SHORTCUT_ADD_TO_EXISTING_CONTACT, showNumberShortcuts);
         changed |= setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL,
                 showNumberShortcuts && CallUtil.isVideoEnabled(getContext()));
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index e609362..24ddc73 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -20,6 +20,7 @@
 import android.content.res.Resources;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.ContactsContract;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.animation.Interpolator;
@@ -152,6 +153,8 @@
         final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
         final int shortcutType = adapter.getShortcutTypeFromPosition(position);
         final OnPhoneNumberPickerActionListener listener;
+        final Intent intent;
+        final String number;
 
         switch (shortcutType) {
             case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
@@ -163,17 +166,26 @@
                     listener.onCallNumberDirectly(getQueryString());
                 }
                 break;
-            case DialerPhoneNumberListAdapter.SHORTCUT_ADD_TO_EXISTING_CONTACT:
-                final String number = TextUtils.isEmpty(mAddToContactNumber) ?
+            case DialerPhoneNumberListAdapter.SHORTCUT_CREATE_NEW_CONTACT:
+                number = TextUtils.isEmpty(mAddToContactNumber) ?
                         adapter.getFormattedQueryString() : mAddToContactNumber;
-                final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
+                intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
+                intent.putExtra(ContactsContract.Intents.Insert.PHONE, number);
+                intent.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE,
+                        ContactsContract.CommonDataKinds.Phone.TYPE_MAIN);
+                DialerUtils.startActivityWithErrorToast(getActivity(), intent);
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_ADD_TO_EXISTING_CONTACT:
+                number = TextUtils.isEmpty(mAddToContactNumber) ?
+                        adapter.getFormattedQueryString() : mAddToContactNumber;
+                intent = DialtactsActivity.getAddNumberToContactIntent(number);
                 DialerUtils.startActivityWithErrorToast(getActivity(), intent,
                         R.string.add_contact_not_available);
                 break;
             case DialerPhoneNumberListAdapter.SHORTCUT_SEND_SMS_MESSAGE:
-                final Intent sendSmsIntent = new Intent(
+                intent = new Intent(
                         Intent.ACTION_VIEW, Uri.parse(SMS_URI_PREFIX + getQueryString()));
-                DialerUtils.startActivityWithErrorToast(getActivity(), sendSmsIntent);
+                DialerUtils.startActivityWithErrorToast(getActivity(), intent);
                 break;
             case DialerPhoneNumberListAdapter.SHORTCUT_MAKE_VIDEO_CALL:
                 listener = getOnPhoneNumberPickerListener();
diff --git a/src/com/android/dialer/list/SmartDialNumberListAdapter.java b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
index ed01baf..22ee92d 100644
--- a/src/com/android/dialer/list/SmartDialNumberListAdapter.java
+++ b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
@@ -116,6 +116,7 @@
     public void setQueryString(String queryString) {
         final boolean showNumberShortcuts = !TextUtils.isEmpty(getFormattedQueryString());
         boolean changed = false;
+        changed |= setShortcutEnabled(SHORTCUT_CREATE_NEW_CONTACT, showNumberShortcuts);
         changed |= setShortcutEnabled(SHORTCUT_ADD_TO_EXISTING_CONTACT, showNumberShortcuts);
         changed |= setShortcutEnabled(SHORTCUT_SEND_SMS_MESSAGE, showNumberShortcuts);
         changed |= setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL,