Add "Make video call" button to search fragments.

= Add new "make video call" shortcut type, and "handle" its click
in SearchFragment.
= Enable "make video call" shortcut for regular and smart dial search
fragments. For now, this shortcut does nothing.
= Enable "add contact" shortcut for smart dial search fragment.
= Changed the bounds of the shortcut items to fill to the edges.
= Convert shortcut click handling to use switch/case block.
= TODO: Enable/disable the shortcuts depending on whether video
calling has been enabled, once the option is available.
= TODO: Handle dispatching a video call intent, once that intent
extra is provided.

Bug: 16013180
Change-Id: I7563d1f2939e27c4b13ed966b73cd4badd9d9fa7
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 014ea7e..4141351 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1105,8 +1105,21 @@
 
     @Override
     public void onCallNumberDirectly(String phoneNumber) {
-        final PhoneAccount account = mAccountManager != null?
-                mAccountManager.getCurrentAccount(): null;
+        onCallNumberDirectly(phoneNumber, false /* isVideoCall */);
+    }
+
+    @Override
+    public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) {
+        if (isVideoCall) {
+            //TODO: Dispatch intent with video call extras specified, then remove this toast.
+            Toast toast = Toast.makeText(getApplicationContext(),
+                    "Feature development in progress.", Toast.LENGTH_SHORT);
+            toast.show();
+            return;
+        }
+
+        final PhoneAccount account = mAccountManager != null ?
+                mAccountManager.getCurrentAccount() : null;
         Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin(), account);
         DialerUtils.startActivityWithErrorToast(this, intent);
         mClearSearchOnPause = true;
diff --git a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
index abceda4..9fb2239 100644
--- a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
+++ b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
@@ -28,8 +28,9 @@
     public final static int SHORTCUT_INVALID = -1;
     public final static int SHORTCUT_DIRECT_CALL = 0;
     public final static int SHORTCUT_ADD_NUMBER_TO_CONTACTS = 1;
+    public final static int SHORTCUT_MAKE_VIDEO_CALL = 2;
 
-    public final static int SHORTCUT_COUNT = 2;
+    public final static int SHORTCUT_COUNT = 3;
 
     private final boolean[] mShortcutEnabled = new boolean[SHORTCUT_COUNT];
 
@@ -145,12 +146,17 @@
                 text = resources.getString(R.string.search_shortcut_add_to_contacts);
                 drawableId = R.drawable.ic_search_add_contact;
                 break;
+            case SHORTCUT_MAKE_VIDEO_CALL:
+                text = resources.getString(R.string.search_shortcut_make_video_call);
+                drawableId = R.drawable.ic_videocam;
+                break;
             default:
                 throw new IllegalArgumentException("Invalid shortcut type");
         }
         v.setDrawableResource(R.drawable.search_shortcut_background, drawableId);
         v.setDisplayName(text);
         v.setPhotoPosition(super.getPhotoPosition());
+        v.setAdjustSelectionBoundsEnabled(false);
     }
 
     public void setShortcutEnabled(int shortcutType, boolean visible) {
diff --git a/src/com/android/dialer/list/RegularSearchListAdapter.java b/src/com/android/dialer/list/RegularSearchListAdapter.java
index d0617b7..2bceaf9 100644
--- a/src/com/android/dialer/list/RegularSearchListAdapter.java
+++ b/src/com/android/dialer/list/RegularSearchListAdapter.java
@@ -73,6 +73,9 @@
         // a dialable number, then clicking add to contact should add it as a number.
         // Otherwise, it should add it to a new contact as a name.
         setShortcutEnabled(SHORTCUT_ADD_NUMBER_TO_CONTACTS, showNumberShortcuts);
+        // TODO: Write utility method to check subscriptions and settings, and use it to determine
+        // whether to enable or disable video call shortcut.
+        setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL, showNumberShortcuts);
         super.setQueryString(queryString);
     }
 }
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 03d2242..e2cea41 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -147,21 +147,31 @@
     protected void onItemClick(int position, long id) {
         final DialerPhoneNumberListAdapter adapter = (DialerPhoneNumberListAdapter) getAdapter();
         final int shortcutType = adapter.getShortcutTypeFromPosition(position);
+        final OnPhoneNumberPickerActionListener listener;
 
-        if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_INVALID) {
-            super.onItemClick(position, id);
-        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL) {
-            final OnPhoneNumberPickerActionListener listener =
-                    getOnPhoneNumberPickerListener();
-            if (listener != null) {
-                listener.onCallNumberDirectly(getQueryString());
-            }
-        } else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
-            final String number = TextUtils.isEmpty(mAddToContactNumber) ?
-                    adapter.getFormattedQueryString() : mAddToContactNumber;
-            final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
-            DialerUtils.startActivityWithErrorToast(getActivity(), intent,
-                    R.string.add_contact_not_available);
+        switch (shortcutType) {
+            case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
+                super.onItemClick(position, id);
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL:
+                listener = getOnPhoneNumberPickerListener();
+                if (listener != null) {
+                    listener.onCallNumberDirectly(getQueryString());
+                }
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS:
+                final String number = TextUtils.isEmpty(mAddToContactNumber) ?
+                        adapter.getFormattedQueryString() : mAddToContactNumber;
+                final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
+                DialerUtils.startActivityWithErrorToast(getActivity(), intent,
+                        R.string.add_contact_not_available);
+                break;
+            case DialerPhoneNumberListAdapter.SHORTCUT_MAKE_VIDEO_CALL:
+                listener = getOnPhoneNumberPickerListener();
+                if (listener != null) {
+                    listener.onCallNumberDirectly(getQueryString(), true /* isVideoCall */);
+                }
+                break;
         }
     }
 
diff --git a/src/com/android/dialer/list/SmartDialNumberListAdapter.java b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
index 25d442e..d9aa846 100644
--- a/src/com/android/dialer/list/SmartDialNumberListAdapter.java
+++ b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
@@ -22,6 +22,7 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Callable;
 import android.telephony.PhoneNumberUtils;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.common.list.ContactListItemView;
@@ -112,4 +113,14 @@
             return null;
         }
     }
+
+    @Override
+    public void setQueryString(String queryString) {
+        final boolean showNumberShortcuts = !TextUtils.isEmpty(getFormattedQueryString());
+        setShortcutEnabled(SHORTCUT_ADD_NUMBER_TO_CONTACTS, showNumberShortcuts);
+        // TODO: Write utility method to check subscriptions and settings, and use it to determine
+        // whether to enable or disable video call shortcut.
+        setShortcutEnabled(SHORTCUT_MAKE_VIDEO_CALL, showNumberShortcuts);
+        super.setQueryString(queryString);
+    }
 }