Support QuickContacts For Extended Directories

Change-Id: I00128b882be3124e31cd2de6a974ec2d507344b1
diff --git a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
index 2af055e..e347e36 100644
--- a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
@@ -37,6 +37,7 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.extensions.ExtendedPhoneDirectoriesManager;
 import com.android.contacts.common.extensions.ExtensionsFactory;
+import com.android.contacts.common.util.Constants;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -496,4 +497,21 @@
             }
         }
     }
+
+    protected Uri getContactUri(int partitionIndex, Cursor cursor,
+            int contactIdColumn, int lookUpKeyColumn) {
+        final DirectoryPartition directory = (DirectoryPartition) getPartition(partitionIndex);
+        final long directoryId = directory.getDirectoryId();
+        if (!isExtendedDirectory(directoryId)) {
+            return super.getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn);
+        }
+
+        return Contacts.CONTENT_LOOKUP_URI.buildUpon()
+                .appendPath(Constants.LOOKUP_URI_ENCODED)
+                .appendQueryParameter(Constants.LOOKUP_URI_JSON, cursor.getString(lookUpKeyColumn))
+                .appendQueryParameter(Directory.DISPLAY_NAME, directory.getLabel())
+                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                        String.valueOf(directoryId))
+                .build();
+    }
 }
diff --git a/src/com/android/contacts/common/util/Constants.java b/src/com/android/contacts/common/util/Constants.java
index 46ddbae..5d6bbac 100644
--- a/src/com/android/contacts/common/util/Constants.java
+++ b/src/com/android/contacts/common/util/Constants.java
@@ -24,4 +24,7 @@
      */
     public static final String PERFORMANCE_TAG = "ContactsPerf";
 
+    // Used for lookup URI that contains an encoded JSON string.
+    public static final String LOOKUP_URI_ENCODED = "encoded";
+    public static final String LOOKUP_URI_JSON = "json";
 }