Merge "Adding util to consolidate primary/alternative name choice" into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/common/util/ContactDisplayUtils.java b/src/com/android/contacts/common/util/ContactDisplayUtils.java
index ca91024..ca5fdbd 100644
--- a/src/com/android/contacts/common/util/ContactDisplayUtils.java
+++ b/src/com/android/contacts/common/util/ContactDisplayUtils.java
@@ -22,11 +22,14 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.Spannable;
 import android.text.SpannableString;
+import android.text.TextUtils;
 import android.text.style.TtsSpan;
 import android.util.Log;
 import android.util.Patterns;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.common.testing.NeededForTesting;
 
 import com.google.common.base.Preconditions;
 
@@ -220,4 +223,40 @@
         }
         return spannable;
     }
+
+    /**
+     * Returns either namePrimary or nameAlternative based on the value of displayOrderPreference
+     *
+     * In the event that nameAlternative is empty or displayOrderPreference is neither
+     * {@link ContactsPreferences#DISPLAY_ORDER_PRIMARY} nor
+     * {@link ContactsPreferences#DISPLAY_ORDER_ALTERNATIVE}, namePrimary is returned
+     *
+     * @param namePrimary the primary name
+     * @param nameAlternative the alternative name
+     * @param displayOrderPreference one of {@link ContactsPreferences#DISPLAY_ORDER_PRIMARY} or
+     *          {@link ContactsPreferences#DISPLAY_ORDER_ALTERNATIVE}
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference
+     */
+    @NeededForTesting // TODO Temporary until used in source
+    public static String getPreferredName(String namePrimary, String nameAlternative,
+            int displayOrderPreference) {
+        if (TextUtils.isEmpty(nameAlternative)) {
+            Log.d(TAG, "nameAlternative was empty - defaulting to primary");
+            return namePrimary;
+        }
+
+        if (displayOrderPreference != ContactsPreferences.DISPLAY_ORDER_PRIMARY
+                && displayOrderPreference != ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE) {
+            Log.d(TAG, "Attempted to get preferredName with invalid preference "
+                    + "- defaulting to primary");
+            return namePrimary;
+        }
+
+
+        if (displayOrderPreference == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+            return namePrimary;
+        }
+
+        return nameAlternative;
+    }
 }
diff --git a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
index 544abbb..3871b7c 100644
--- a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
+++ b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
@@ -22,6 +22,7 @@
 import android.test.suitebuilder.annotation.SmallTest;
 
 import com.android.contacts.common.R;
+import com.android.contacts.common.preference.ContactsPreferences;
 
 /**
  * Unit tests for (@link ContactDisplayUtils}
@@ -29,6 +30,9 @@
 @SmallTest
 public class ContactDisplayUtilTests extends AndroidTestCase {
 
+    private static final String NAME_PRIMARY = "Name Primary";
+    private static final String NAME_ALTERNATIVE = "Name Alternative";
+
     public void testIsCustomPhoneTypeReturnsTrue() {
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
@@ -92,4 +96,23 @@
         assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
     }
 
+    public void testGetPreferredNameEmptyAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY, "",
+                ContactsPreferences.DISPLAY_ORDER_PRIMARY));
+    }
+
+    public void testGetPreferredInvalidPreference() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, -1));
+    }
+
+    public void testGetPreferredNamePrimary() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_PRIMARY));
+    }
+
+    public void testGetPreferredNameAlternative() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
+    }
 }