Show quick contact in phone search UI

Change-Id: Ibc643162b9c74964b1b9e9bd89351203fb29d6b6
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index bc89d2d..3f29889 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -282,6 +282,7 @@
         mSearchFragment.setOnPhoneNumberPickerActionListener(
                 mPhoneNumberPickerActionListener);
         mSearchFragment.setHighlightSearchPrefix(true);
+        mSearchFragment.setQuickContactEnabled(true);
 
         final FragmentTransaction transaction = getFragmentManager().beginTransaction();
         transaction.hide(mSearchFragment);
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 62b678c..69b0077 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -35,6 +35,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.QuickContactBadge;
 import android.widget.TextView;
 
 import java.util.HashSet;
@@ -617,4 +618,32 @@
             return super.getItemPlacementInSection(position);
         }
     }
+
+    // TODO: move sharable logic (bindXX() methods) to here with extra arguments
+
+    protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
+            Cursor cursor, int photoIdColumn, int lookUpKeyColumn) {
+        long photoId = 0;
+        if (!cursor.isNull(photoIdColumn)) {
+            photoId = cursor.getLong(photoIdColumn);
+        }
+
+        QuickContactBadge quickContact = view.getQuickContact();
+        quickContact.assignContactUri(
+                getContactUri(partitionIndex, cursor, photoIdColumn, lookUpKeyColumn));
+        getPhotoLoader().loadPhoto(quickContact, photoId);
+    }
+
+    protected Uri getContactUri(int partitionIndex, Cursor cursor,
+            int photoIdColumn, int lookUpKeyColumn) {
+        long contactId = cursor.getLong(photoIdColumn);
+        String lookupKey = cursor.getString(lookUpKeyColumn);
+        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+        if (directoryId != Directory.DEFAULT) {
+            uri = uri.buildUpon().appendQueryParameter(
+                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+        }
+        return uri;
+    }
 }
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index 8af0af2..e51fd5c 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -298,18 +298,6 @@
         }
     }
 
-    protected void bindQuickContact(
-            final ContactListItemView view, int partitionIndex, Cursor cursor) {
-        long photoId = 0;
-        if (!cursor.isNull(CONTACT_PHOTO_ID_COLUMN_INDEX)) {
-            photoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
-        }
-
-        QuickContactBadge quickContact = view.getQuickContact();
-        quickContact.assignContactUri(getContactUri(partitionIndex, cursor));
-        getPhotoLoader().loadPhoto(quickContact, photoId);
-    }
-
     protected void bindName(final ContactListItemView view, Cursor cursor) {
         view.showDisplayName(cursor, mDisplayNameColumnIndex, mAlternativeDisplayNameColumnIndex,
                 isNameHighlightingEnabled(), getContactNameDisplayOrder());
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 6916514..5ba1d8e 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -224,7 +224,8 @@
         bindSectionHeaderAndDivider(view, position);
 
         if (isQuickContactEnabled()) {
-            bindQuickContact(view, partition, cursor);
+            bindQuickContact(view, partition, cursor,
+                    CONTACT_PHOTO_ID_COLUMN_INDEX, CONTACT_LOOKUP_KEY_COLUMN_INDEX);
         } else {
             bindPhoto(view, partition, cursor);
         }
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index 53a9e5f..109d857 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -24,12 +24,14 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.ContactCounts;
+import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Directory;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.QuickContactBadge;
 
 /**
  * A cursor adapter for the {@link Phone#CONTENT_TYPE} content type.
@@ -45,8 +47,9 @@
         Phone.DISPLAY_NAME_PRIMARY,         // 4
         Phone.DISPLAY_NAME_ALTERNATIVE,     // 5
         Phone.CONTACT_ID,                   // 6
-        Phone.PHOTO_ID,                     // 7
-        Phone.PHONETIC_NAME,                // 8
+        Phone.LOOKUP_KEY,                   // 7
+        Phone.PHOTO_ID,                     // 8
+        Phone.PHONETIC_NAME,                // 9
     };
 
     protected static final int PHONE_ID_COLUMN_INDEX = 0;
@@ -56,8 +59,9 @@
     protected static final int PHONE_PRIMARY_DISPLAY_NAME_COLUMN_INDEX = 4;
     protected static final int PHONE_ALTERNATIVE_DISPLAY_NAME_COLUMN_INDEX = 5;
     protected static final int PHONE_CONTACT_ID_COLUMN_INDEX = 6;
-    protected static final int PHONE_PHOTO_ID_COLUMN_INDEX = 7;
-    protected static final int PHONE_PHONETIC_NAME_COLUMN_INDEX = 8;
+    protected static final int PHONE_LOOKUP_KEY_COLUMN_INDEX = 7;
+    protected static final int PHONE_PHOTO_ID_COLUMN_INDEX = 8;
+    protected static final int PHONE_PHONETIC_NAME_COLUMN_INDEX = 9;
 
     private CharSequence mUnknownNameText;
     private int mDisplayNameColumnIndex;
@@ -202,10 +206,16 @@
         bindSectionHeaderAndDivider(view, position);
         if (isFirstEntry) {
             bindName(view, cursor);
-            bindPhoto(view, cursor);
+            if (isQuickContactEnabled()) {
+                bindQuickContact(view, partition, cursor,
+                        PHONE_PHOTO_ID_COLUMN_INDEX, PHONE_LOOKUP_KEY_COLUMN_INDEX);
+            } else {
+                bindPhoto(view, cursor);
+            }
         } else {
             unbindName(view);
-            unbindPhoto(view);
+
+            view.removePhotoView(true, false);
         }
         bindPhoneNumber(view, cursor);
         view.setDividerVisible(showBottomDivider);
@@ -255,10 +265,6 @@
         getPhotoLoader().loadPhoto(view.getPhotoView(), photoId);
     }
 
-    protected void unbindPhoto(final ContactListItemView view) {
-        view.removePhotoView(true, false);
-    }
-
     public void setHighlightSearchPrefix(boolean highlight) {
         mHighlightSearchPrefix = highlight;
     }