Merge "Adding util to consolidate primary/alternative name choice" into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/common/ContactTileLoaderFactory.java b/src/com/android/contacts/common/ContactTileLoaderFactory.java
index f8b0c35..f75950e 100644
--- a/src/com/android/contacts/common/ContactTileLoaderFactory.java
+++ b/src/com/android/contacts/common/ContactTileLoaderFactory.java
@@ -48,6 +48,7 @@
     // contacts._id because the query is performed on the data table. In order to obtain the
     // contact id for strequent items, we thus have to use Phone.contact_id instead.
     public final static int CONTACT_ID_FOR_DATA = 10;
+    public final static int DISPLAY_NAME_ALTERNATIVE = 11;
 
     private static final String[] COLUMNS = new String[] {
         Contacts._ID, // ..........................................0
@@ -68,7 +69,7 @@
     @VisibleForTesting
     public static final String[] COLUMNS_PHONE_ONLY = new String[] {
         Contacts._ID, // ..........................................0
-        Contacts.DISPLAY_NAME, // .................................1
+        Contacts.DISPLAY_NAME_PRIMARY, // .........................1
         Contacts.STARRED, // ......................................2
         Contacts.PHOTO_URI, // ....................................3
         Contacts.LOOKUP_KEY, // ...................................4
@@ -77,7 +78,8 @@
         Phone.LABEL, // ...........................................7
         Phone.IS_SUPER_PRIMARY, //.................................8
         Contacts.PINNED, // .......................................9
-        Phone.CONTACT_ID //........................................10
+        Phone.CONTACT_ID, //.......................................10
+        Contacts.DISPLAY_NAME_ALTERNATIVE, // .....................11
     };
 
     private static final String STARRED_ORDER = Contacts.DISPLAY_NAME+" COLLATE NOCASE ASC";
diff --git a/src/com/android/contacts/common/list/ContactEntry.java b/src/com/android/contacts/common/list/ContactEntry.java
index 43fc19d..a29a8d8 100644
--- a/src/com/android/contacts/common/list/ContactEntry.java
+++ b/src/com/android/contacts/common/list/ContactEntry.java
@@ -19,12 +19,31 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.provider.ContactsContract.PinnedPositions;
+import android.text.TextUtils;
+
+import com.android.contacts.common.preference.ContactsPreferences;
 
 /**
  * Class to hold contact information
  */
 public class ContactEntry {
-    public String name;
+
+    private static final int UNSET_DISPLAY_ORDER_PREFERENCE = -1;
+
+    /**
+     * Primary name for a Contact
+     */
+    public String namePrimary;
+    /**
+     * Alternative name for a Contact, e.g. last name first
+     */
+    public String nameAlternative;
+    /**
+     * The user's preference on name display order, last name first or first time first.
+     * {@see ContactsPreferences}
+     */
+    public int nameDisplayOrder = UNSET_DISPLAY_ORDER_PREFERENCE;
+
     public String status;
     public String phoneLabel;
     public String phoneNumber;
@@ -38,4 +57,13 @@
     public boolean isDefaultNumber = false;
 
     public static final ContactEntry BLANK_ENTRY = new ContactEntry();
+
+    public String getPreferredDisplayName() {
+        if (nameDisplayOrder == UNSET_DISPLAY_ORDER_PREFERENCE
+                || nameDisplayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY
+                || TextUtils.isEmpty(nameAlternative)) {
+            return namePrimary;
+        }
+        return nameAlternative;
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/contacts/common/list/ContactTileAdapter.java b/src/com/android/contacts/common/list/ContactTileAdapter.java
index ac10f38..c43fcf7 100644
--- a/src/com/android/contacts/common/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/common/list/ContactTileAdapter.java
@@ -243,7 +243,7 @@
 
         ContactEntry contact = new ContactEntry();
         String name = cursor.getString(mNameIndex);
-        contact.name = (name != null) ? name : mResources.getString(R.string.missing_name);
+        contact.namePrimary = (name != null) ? name : mResources.getString(R.string.missing_name);
         contact.status = cursor.getString(mStatusIndex);
         contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
         contact.lookupKey = lookupKey;
diff --git a/src/com/android/contacts/common/list/ContactTileView.java b/src/com/android/contacts/common/list/ContactTileView.java
index 56552bb..172d720 100644
--- a/src/com/android/contacts/common/list/ContactTileView.java
+++ b/src/com/android/contacts/common/list/ContactTileView.java
@@ -94,7 +94,7 @@
     public void loadFromContact(ContactEntry entry) {
 
         if (entry != null) {
-            mName.setText(getNameForView(entry.name));
+            mName.setText(getNameForView(entry));
             mLookupUri = entry.lookupUri;
 
             if (mStatus != null) {
@@ -125,7 +125,8 @@
             setVisibility(View.VISIBLE);
 
             if (mPhotoManager != null) {
-                DefaultImageRequest request = getDefaultImageRequest(entry.name, entry.lookupKey);
+                DefaultImageRequest request = getDefaultImageRequest(entry.namePrimary,
+                        entry.lookupKey);
                 configureViewForImage(entry.photoUri == null);
                 if (mPhoto != null) {
                     mPhotoManager.loadPhoto(mPhoto, entry.photoUri, getApproximateImageSize(),
@@ -145,9 +146,9 @@
             }
 
             if (mPushState != null) {
-                mPushState.setContentDescription(entry.name);
+                mPushState.setContentDescription(entry.namePrimary);
             } else if (mQuickContact != null) {
-                mQuickContact.setContentDescription(entry.name);
+                mQuickContact.setContentDescription(entry.namePrimary);
             }
         } else {
             setVisibility(View.INVISIBLE);
@@ -178,8 +179,8 @@
      * Returns the string that should actually be displayed as the contact's name. Subclasses
      * can override this to return formatted versions of the name - i.e. first name only.
      */
-    protected String getNameForView(String name) {
-        return name;
+    protected String getNameForView(ContactEntry contactEntry) {
+        return contactEntry.namePrimary;
     }
 
     /**