Merge "Add About Settings in Contacts App. (1)" into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
index c2ebbbf..d4a23f0 100644
--- a/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/common/editor/SelectAccountDialogFragment.java
@@ -24,6 +24,7 @@
 import android.content.DialogInterface;
 import android.os.Bundle;
 
+import com.android.contacts.common.R;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountsListAdapter;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
@@ -76,6 +77,7 @@
         final AccountListFilter filter = (AccountListFilter) args.getSerializable(KEY_LIST_FILTER);
         final AccountsListAdapter accountAdapter = new AccountsListAdapter(builder.getContext(),
                 filter);
+        accountAdapter.setCustomLayout(R.layout.account_selector_list_item_condensed);
 
         final DialogInterface.OnClickListener clickListener =
                 new DialogInterface.OnClickListener() {
diff --git a/src/com/android/contacts/common/util/AccountSelectionUtil.java b/src/com/android/contacts/common/util/AccountSelectionUtil.java
index ccbc204..5221f4f 100644
--- a/src/com/android/contacts/common/util/AccountSelectionUtil.java
+++ b/src/com/android/contacts/common/util/AccountSelectionUtil.java
@@ -28,6 +28,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.android.contacts.common.R;
@@ -111,30 +112,28 @@
         final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         final ArrayAdapter<AccountWithDataSet> accountAdapter =
-            new ArrayAdapter<AccountWithDataSet>(context, android.R.layout.simple_list_item_2,
-                    writableAccountList) {
-
+            new ArrayAdapter<AccountWithDataSet>(
+                    context, R.layout.account_selector_list_item_condensed, writableAccountList) {
             @Override
             public View getView(int position, View convertView, ViewGroup parent) {
                 if (convertView == null) {
                     convertView = dialogInflater.inflate(
-                            android.R.layout.simple_list_item_2,
+                            R.layout.account_selector_list_item_condensed,
                             parent, false);
                 }
 
-                // TODO: show icon along with title
-                final TextView text1 =
-                        (TextView)convertView.findViewById(android.R.id.text1);
-                final TextView text2 =
-                        (TextView)convertView.findViewById(android.R.id.text2);
+                final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
+                final TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);
+                final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
 
                 final AccountWithDataSet account = this.getItem(position);
                 final AccountType accountType = accountTypes.getAccountType(
                         account.type, account.dataSet);
                 final Context context = getContext();
 
-                text1.setText(account.name);
-                text2.setText(accountType.getDisplayLabel(context));
+                text1.setText(accountType.getDisplayLabel(context));
+                text2.setText(account.name);
+                icon.setImageDrawable(accountType.getDisplayIcon(getContext()));
 
                 return convertView;
             }
diff --git a/src/com/android/contacts/common/util/AccountsListAdapter.java b/src/com/android/contacts/common/util/AccountsListAdapter.java
index 84435df..2c7a349 100644
--- a/src/com/android/contacts/common/util/AccountsListAdapter.java
+++ b/src/com/android/contacts/common/util/AccountsListAdapter.java
@@ -41,6 +41,7 @@
     private final List<AccountWithDataSet> mAccounts;
     private final AccountTypeManager mAccountTypes;
     private final Context mContext;
+    private int mCustomLayout = -1;
 
     /**
      * Filters that affect the list of accounts that is displayed by this adapter.
@@ -81,10 +82,15 @@
                 accountListFilter == AccountListFilter.ACCOUNTS_CONTACT_WRITABLE));
     }
 
+    public void setCustomLayout(int customLayout) {
+        mCustomLayout = customLayout;
+    }
+
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        final View resultView = convertView != null ? convertView
-                : mInflater.inflate(R.layout.account_selector_list_item, parent, false);
+        final View resultView = convertView != null ? convertView :
+                mInflater.inflate(mCustomLayout > 0 ? mCustomLayout :
+                        R.layout.account_selector_list_item, parent, false);
 
         final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
         final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
diff --git a/src/com/android/contacts/common/util/ContactDisplayUtils.java b/src/com/android/contacts/common/util/ContactDisplayUtils.java
index ca5fdbd..934ba25 100644
--- a/src/com/android/contacts/common/util/ContactDisplayUtils.java
+++ b/src/com/android/contacts/common/util/ContactDisplayUtils.java
@@ -18,6 +18,8 @@
 
 import static android.provider.ContactsContract.CommonDataKinds.Phone;
 
+import com.google.common.base.Preconditions;
+
 import android.content.Context;
 import android.telephony.PhoneNumberUtils;
 import android.text.Spannable;
@@ -31,8 +33,6 @@
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.common.testing.NeededForTesting;
 
-import com.google.common.base.Preconditions;
-
 /**
  * Methods for handling various contact data labels.
  */
@@ -237,26 +237,44 @@
      *          {@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,
+    public static String getPreferredDisplayName(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;
+        if (displayOrderPreference == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE &&
+                !TextUtils.isEmpty(nameAlternative)) {
+            return nameAlternative;
+        }
+
+        return namePrimary;
+    }
+
+    /**
+     * Returns either namePrimary or nameAlternative based on the value of sortOrderPreference
+     *
+     * 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
+     */
+    public static String getPreferredSortName(String namePrimary, String nameAlternative,
+            int sortOrderPreference) {
+        if (sortOrderPreference == ContactsPreferences.SORT_ORDER_PRIMARY) {
+            return namePrimary;
+        }
+
+        if (sortOrderPreference == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
+                !TextUtils.isEmpty(nameAlternative)) {
+            return nameAlternative;
+        }
+
+        return namePrimary;
     }
 }
diff --git a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
index 3871b7c..a8e3038 100644
--- a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
+++ b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
@@ -96,23 +96,43 @@
         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 testGetPreferredDisplayNameEmptyAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, "",
+                ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
     }
 
-    public void testGetPreferredInvalidPreference() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+    public void testGetPreferredDisplayNameInvalidPreference() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
                 NAME_ALTERNATIVE, -1));
     }
 
-    public void testGetPreferredNamePrimary() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+    public void testGetPreferredDisplayNamePrimary() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
                 NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_PRIMARY));
     }
 
-    public void testGetPreferredNameAlternative() {
-        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredName(NAME_PRIMARY,
+    public void testGetPreferredDisplayNameAlternative() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
                 NAME_ALTERNATIVE, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE));
     }
+
+    public void testGetPreferredSortNameEmptyAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, "",
+                ContactsPreferences.SORT_ORDER_ALTERNATIVE));
+    }
+
+    public void testGetPreferredSortNameInvalidPreference() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, -1));
+    }
+
+    public void testGetPreferredSortNamePrimary() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.SORT_ORDER_PRIMARY));
+    }
+
+    public void testGetPreferredSortNameAlternative() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, ContactsPreferences.SORT_ORDER_ALTERNATIVE));
+    }
 }