Updating preferredName methods to accept ContactsPreferences

Rather than accepting an int, this method accepts a nullable
ContactsPreferences object to abstract the null checks that would
otherwise be needed everywhere these utility methods are used.

Bug=26822105

Change-Id: Id41a182a70098ab2898938588f86f54e16c597b7
diff --git a/src/com/android/contacts/common/util/ContactDisplayUtils.java b/src/com/android/contacts/common/util/ContactDisplayUtils.java
index e054acb..0a50748 100644
--- a/src/com/android/contacts/common/util/ContactDisplayUtils.java
+++ b/src/com/android/contacts/common/util/ContactDisplayUtils.java
@@ -22,6 +22,7 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.support.annotation.Nullable;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.TextUtils;
@@ -240,26 +241,26 @@
     }
 
     /**
-     * Returns either namePrimary or nameAlternative based on the value of displayOrderPreference
+     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+     * Defaults to the name that is non-null.
      *
-     * 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
+     * @param namePrimary the primary name.
+     * @param nameAlternative the alternative name.
+     * @param contactsPreferences the ContactsPreferences used to determine the preferred
+     * display name.
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
      */
     public static String getPreferredDisplayName(String namePrimary, String nameAlternative,
-            int displayOrderPreference) {
-        if (displayOrderPreference == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+            @Nullable ContactsPreferences contactsPreferences) {
+        if (contactsPreferences == null) {
+            return namePrimary != null ? namePrimary : nameAlternative;
+        }
+        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
             return namePrimary;
         }
 
-        if (displayOrderPreference == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE &&
-                !TextUtils.isEmpty(nameAlternative)) {
+        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE
+                && !TextUtils.isEmpty(nameAlternative)) {
             return nameAlternative;
         }
 
@@ -267,25 +268,26 @@
     }
 
     /**
-     * Returns either namePrimary or nameAlternative based on the value of sortOrderPreference
+     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+     * Defaults to the name that is non-null.
      *
-     * In the event that nameAlternative is empty or sortOrderPreference is neither
-     * {@link ContactsPreferences#SORT_ORDER_PRIMARY} nor
-     * {@link ContactsPreferences#SORT_ORDER_ALTERNATIVE}, namePrimary is returned
-     *
-     * @param namePrimary the primary name
-     * @param nameAlternative the alternative name
-     * @param sortOrderPreference one of {@link ContactsPreferences#SORT_ORDER_PRIMARY} or
-     *          {@link ContactsPreferences#SORT_ORDER_ALTERNATIVE}
-     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference
+     * @param namePrimary the primary name.
+     * @param nameAlternative the alternative name.
+     * @param contactsPreferences the ContactsPreferences used to determine the preferred sort
+     * order.
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
      */
     public static String getPreferredSortName(String namePrimary, String nameAlternative,
-            int sortOrderPreference) {
-        if (sortOrderPreference == ContactsPreferences.SORT_ORDER_PRIMARY) {
+            @Nullable ContactsPreferences contactsPreferences) {
+        if (contactsPreferences == null) {
+            return namePrimary != null ? namePrimary : nameAlternative;
+        }
+
+        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
             return namePrimary;
         }
 
-        if (sortOrderPreference == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
+        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
                 !TextUtils.isEmpty(nameAlternative)) {
             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 a8e3038..b4cd1ca 100644
--- a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
+++ b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
@@ -24,6 +24,10 @@
 import com.android.contacts.common.R;
 import com.android.contacts.common.preference.ContactsPreferences;
 
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
 /**
  * Unit tests for (@link ContactDisplayUtils}
  */
@@ -33,6 +37,14 @@
     private static final String NAME_PRIMARY = "Name Primary";
     private static final String NAME_ALTERNATIVE = "Name Alternative";
 
+    @Mock private ContactsPreferences mContactsPreferences;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        MockitoAnnotations.initMocks(this);
+    }
+
     public void testIsCustomPhoneTypeReturnsTrue() {
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
         assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
@@ -96,43 +108,95 @@
         assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
     }
 
-    public void testGetPreferredDisplayNameEmptyAlternative() {
+    public void testGetPreferredDisplayName_NullContactsPreferences() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_NullAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, null,
+                null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_NullPrimary() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(null,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_BothNull() {
+        assertNull(ContactDisplayUtils.getPreferredDisplayName(null, null, null));
+    }
+
+    public void testGetPreferredDisplayName_EmptyAlternative() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, "",
-                ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
+                mContactsPreferences));
     }
 
-    public void testGetPreferredDisplayNameInvalidPreference() {
+    public void testGetPreferredDisplayName_InvalidPreference() {
+        Mockito.when(mContactsPreferences.getDisplayOrder()).thenReturn(-1);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, -1));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 
-    public void testGetPreferredDisplayNamePrimary() {
+    public void testGetPreferredDisplayName_Primary() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_PRIMARY));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 
-    public void testGetPreferredDisplayNameAlternative() {
+    public void testGetPreferredDisplayName_Alternative() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
         assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 
-    public void testGetPreferredSortNameEmptyAlternative() {
+    public void testGetPreferredSortName_NullContactsPreferences() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_NullAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, null,
+                null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_NullPrimary() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(null,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_BothNull() {
+        assertNull(ContactDisplayUtils.getPreferredSortName(null, null, null));
+    }
+
+    public void testGetPreferredSortName_EmptyAlternative() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, "",
-                ContactsPreferences.SORT_ORDER_ALTERNATIVE));
+                mContactsPreferences));
     }
 
-    public void testGetPreferredSortNameInvalidPreference() {
+    public void testGetPreferredSortName_InvalidPreference() {
+        Mockito.when(mContactsPreferences.getSortOrder()).thenReturn(-1);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, -1));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 
-    public void testGetPreferredSortNamePrimary() {
+    public void testGetPreferredSortName_Primary() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
         assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, ContactsPreferences.SORT_ORDER_PRIMARY));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 
-    public void testGetPreferredSortNameAlternative() {
+    public void testGetPreferredSortName_Alternative() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
         assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, ContactsPreferences.SORT_ORDER_ALTERNATIVE));
+                NAME_ALTERNATIVE, mContactsPreferences));
     }
 }