Fixing direct dial shortcut maker

Change-Id: I8ef26983a4ef08a964cfca31ef2373a8fba0ea06
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 093aec6..e899d69 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -279,6 +279,7 @@
                 fragment.setCreateContactEnabled(!mRequest.isSearchMode());
                 fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
                 fragment.setSearchMode(mRequest.isSearchMode());
+                fragment.setQueryString(mRequest.getQueryString());
                 fragment.setShortcutRequested(true);
                 mListFragment = fragment;
                 break;
@@ -298,8 +299,9 @@
                 fragment.setOnPhoneNumberPickerActionListener(
                         new PhoneNumberPickerActionListener());
                 fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setSectionHeaderDisplayEnabled(false);
                 fragment.setShortcutAction(Intent.ACTION_CALL);
+                fragment.setSearchMode(mRequest.isSearchMode());
+
                 mListFragment = fragment;
                 break;
             }
@@ -309,8 +311,9 @@
                 fragment.setOnPhoneNumberPickerActionListener(
                         new PhoneNumberPickerActionListener());
                 fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
-                fragment.setSectionHeaderDisplayEnabled(false);
                 fragment.setShortcutAction(Intent.ACTION_SENDTO);
+                fragment.setSearchMode(mRequest.isSearchMode());
+
                 mListFragment = fragment;
                 break;
             }
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index 617e823..0bfd6dc 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -20,10 +20,14 @@
 import android.content.CursorLoader;
 import android.database.Cursor;
 import android.net.Uri;
+import android.net.Uri.Builder;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.ContactCounts;
+import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -57,6 +61,7 @@
     private CharSequence mUnknownNameText;
     private int mDisplayNameColumnIndex;
     private int mAlternativeDisplayNameColumnIndex;
+    private boolean mVisibleContactsOnly = true;
 
     public PhoneNumberListAdapter(Context context) {
         super(context);
@@ -68,11 +73,43 @@
         return mUnknownNameText;
     }
 
+    public void setVisibleContactsOnly(boolean flag) {
+        mVisibleContactsOnly = flag;
+    }
+
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
-        loader.setUri(buildSectionIndexerUri(Phone.CONTENT_URI));
-        loader.setProjection(PHONES_PROJECTION);
+        Uri uri;
 
+        if (isSearchMode()) {
+            String query = getQueryString();
+            Builder builder = Phone.CONTENT_FILTER_URI.buildUpon();
+            if (TextUtils.isEmpty(query)) {
+                builder.appendPath("");
+            } else {
+                builder.appendPath(query);      // Builder will encode the query
+            }
+
+            builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                    String.valueOf(directoryId));
+            uri = builder.build();
+            // TODO a projection that includes the search snippet
+            loader.setProjection(PHONES_PROJECTION);
+        } else {
+            uri = Phone.CONTENT_URI;
+            loader.setProjection(PHONES_PROJECTION);
+        }
+
+        if (directoryId == Directory.DEFAULT) {
+            if (mVisibleContactsOnly) {
+                loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+            }
+            if (isSectionHeaderDisplayEnabled()) {
+                uri = buildSectionIndexerUri(uri);
+            }
+        }
+
+        loader.setUri(uri);
         if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {
             loader.setSortOrder(Phone.SORT_KEY_PRIMARY);
         } else {
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index 4e8ebe9..cf787d2 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.list;
 
+import com.android.contacts.ContactsSearchManager;
 import com.android.contacts.R;
 import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 
@@ -34,7 +35,6 @@
 
     public PhoneNumberPickerFragment() {
         setPhotoLoaderEnabled(true);
-        setSectionHeaderDisplayEnabled(true);
     }
 
     public void setOnPhoneNumberPickerActionListener(OnPhoneNumberPickerActionListener listener) {
@@ -53,11 +53,7 @@
     protected void onItemClick(int position, long id) {
         if (!isLegacyCompatibilityMode()) {
             PhoneNumberListAdapter adapter = (PhoneNumberListAdapter)getAdapter();
-//          if (adapter.isSearchAllContactsItemPosition(position)) {
-//              searchAllContacts();
-//          } else {
             pickPhoneNumber(adapter.getDataUri(position));
-//          }
         } else {
             LegacyPhoneNumberListAdapter adapter = (LegacyPhoneNumberListAdapter)getAdapter();
             pickPhoneNumber(adapter.getPhoneUri(position));
@@ -68,26 +64,25 @@
     protected ContactEntryListAdapter createListAdapter() {
         if (!isLegacyCompatibilityMode()) {
             PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
-            adapter.setSectionHeaderDisplayEnabled(true);
             adapter.setDisplayPhotos(true);
             return adapter;
         } else {
             LegacyPhoneNumberListAdapter adapter = new LegacyPhoneNumberListAdapter(getActivity());
-            adapter.setSectionHeaderDisplayEnabled(true);
             adapter.setDisplayPhotos(true);
             return adapter;
         }
     }
 
     @Override
+    protected void configureAdapter() {
+        setSectionHeaderDisplayEnabled(!isSearchMode());
+        setAizyEnabled(!isSearchMode());
+        super.configureAdapter();
+    }
+
+    @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
-        if (isSearchMode()) {
-            return inflater.inflate(R.layout.contacts_search_content, null);
-        } else if (isSearchResultsMode()) {
-            return inflater.inflate(R.layout.contacts_list_search_results, null);
-        } else {
-            return inflater.inflate(R.layout.contacts_list_content, null);
-        }
+        return inflater.inflate(R.layout.contacts_list_content, null);
     }
 
     public void pickPhoneNumber(Uri uri) {
@@ -105,4 +100,10 @@
     public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
         mListener.onShortcutIntentCreated(shortcutIntent);
     }
+
+    @Override
+    public void startSearch(String initialQuery) {
+        ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
+                ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest());
+    }
 }