Make Nearby Places Display as "Nearby Places"

Rather than "Directory Nearby Place"

Change-Id: I91cbbed3c6005b91885a5bb2f3067c9c19b97e79
diff --git a/src/com/android/contacts/common/list/ContactEntryListAdapter.java b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
index a99d7b4..34ff2e8 100644
--- a/src/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
@@ -382,6 +382,11 @@
             if (getPartitionByDirectoryId(id) == -1) {
                 DirectoryPartition partition = new DirectoryPartition(false, true);
                 partition.setDirectoryId(id);
+                if (isRemoteDirectory(id)) {
+                    partition.setLabel(mContext.getString(R.string.directory_search_label));
+                } else {
+                    partition.setLabel(mDefaultFilterHeaderText.toString());
+                }
                 partition.setDirectoryType(cursor.getString(directoryTypeColumnIndex));
                 partition.setDisplayName(cursor.getString(displayNameColumnIndex));
                 int photoSupport = cursor.getInt(photoSupportColumnIndex);
@@ -550,11 +555,10 @@
         long directoryId = directoryPartition.getDirectoryId();
         TextView labelTextView = (TextView)view.findViewById(R.id.label);
         TextView displayNameTextView = (TextView)view.findViewById(R.id.display_name);
-        if (directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE) {
-            labelTextView.setText(mDefaultFilterHeaderText);
+        labelTextView.setText(directoryPartition.getLabel());
+        if (!isRemoteDirectory(directoryId)) {
             displayNameTextView.setText(null);
         } else {
-            labelTextView.setText(R.string.directory_search_label);
             String directoryName = directoryPartition.getDisplayName();
             String displayName = !TextUtils.isEmpty(directoryName)
                     ? directoryName
@@ -693,4 +697,9 @@
     public String getContactsCount() {
         return mContactsCount;
     }
+
+    public static boolean isRemoteDirectory(long directoryId) {
+        return directoryId != Directory.DEFAULT
+                && directoryId != Directory.LOCAL_INVISIBLE;
+    }
 }
diff --git a/src/com/android/contacts/common/list/DirectoryPartition.java b/src/com/android/contacts/common/list/DirectoryPartition.java
index 9a8d4cc..1340af4 100644
--- a/src/com/android/contacts/common/list/DirectoryPartition.java
+++ b/src/com/android/contacts/common/list/DirectoryPartition.java
@@ -31,6 +31,7 @@
     public static final int RESULT_LIMIT_DEFAULT = -1;
 
     private long mDirectoryId;
+    private String mContentUri;
     private String mDirectoryType;
     private String mDisplayName;
     private int mStatus;
@@ -38,6 +39,8 @@
     private boolean mPhotoSupported;
     private int mResultLimit = RESULT_LIMIT_DEFAULT;
 
+    private String mLabel;
+
     public DirectoryPartition(boolean showIfEmpty, boolean hasHeader) {
         super(showIfEmpty, hasHeader);
     }
@@ -122,4 +125,42 @@
     public void setResultLimit(int resultLimit) {
         mResultLimit = resultLimit;
     }
+
+    /**
+     * Used by extended directories to specify a custom content URI. Extended directories MUST have
+     * a content URI
+     */
+    public String getContentUri() {
+        return mContentUri;
+    }
+
+    public void setContentUri(String contentUri) {
+        mContentUri = contentUri;
+    }
+
+    /**
+     * A label to display in the header next to the display name.
+     */
+    public String getLabel() {
+        return mLabel;
+    }
+
+    public void setLabel(String label) {
+        mLabel = label;
+    }
+
+    @Override
+    public String toString() {
+        return "DirectoryPartition{" +
+                "mDirectoryId=" + mDirectoryId +
+                ", mContentUri='" + mContentUri + '\'' +
+                ", mDirectoryType='" + mDirectoryType + '\'' +
+                ", mDisplayName='" + mDisplayName + '\'' +
+                ", mStatus=" + mStatus +
+                ", mPriorityDirectory=" + mPriorityDirectory +
+                ", mPhotoSupported=" + mPhotoSupported +
+                ", mResultLimit=" + mResultLimit +
+                ", mLabel='" + mLabel + '\'' +
+                '}';
+    }
 }
diff --git a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
index c85c4e5..93b60d7 100644
--- a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
@@ -120,11 +120,6 @@
         return mUnknownNameText;
     }
 
-    private static boolean isRemoteDirectory(long directoryId) {
-        return directoryId != Directory.DEFAULT
-            && directoryId != Directory.LOCAL_INVISIBLE;
-    }
-
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
         String query = getQueryString();
@@ -133,7 +128,12 @@
         }
         if (isExtendedDirectory(directoryId)) {
             final DirectoryPartition directory = getExtendedDirectoryFromId(directoryId);
-            final Builder builder = Uri.parse(directory.getDirectoryType()).buildUpon();
+            final String contentUri = directory.getContentUri();
+            if (contentUri == null) {
+                throw new IllegalStateException("Extended directory must have a content URL: "
+                        + directory);
+            }
+            final Builder builder = Uri.parse(contentUri).buildUpon();
             builder.appendPath(query);
             builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
                     String.valueOf(getDirectoryResultLimit(directory)));