Toast Fixes

Linking snackbar in duplicates respects name order.
(No Name) contact deletion in list view fix.
Linking toast for quick contacts.

Bug: 32243988
Test: Manual testing by selecting and linking toasts from quick contact
and duplicates.
Change-Id: I4fef5c250ab5bb960ffb34c04fec01062d6f1235
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 1dcc838..1b2c22d 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -47,6 +47,7 @@
 import android.provider.ContactsContract.RawContactsEntity;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.os.ResultReceiver;
+import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
@@ -61,6 +62,8 @@
 import com.android.contacts.common.model.RawContactModifier;
 import com.android.contacts.common.model.SimContact;
 import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.contacts.compat.PinnedPositionsCompat;
 import com.android.contacts.util.ContactPhotoUtils;
@@ -1407,7 +1410,11 @@
                 result.putString(EXTRA_DISPLAY_NAME, name);
                 receiver.send(CONTACTS_LINKED, result);
             } else {
-                showToast(R.string.contactsJoinedMessage);
+                if (TextUtils.isEmpty(name)) {
+                    showToast(R.string.contactsJoinedMessage);
+                } else {
+                    showToast(R.string.contactsJoinedNamedMessage, name);
+                }
             }
         } else {
             if (receiver != null) {
@@ -1427,22 +1434,28 @@
         }
         whereBuilder.deleteCharAt(whereBuilder.length() - 1).append(')');
         final Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
-                new String[]{Contacts._ID, Contacts.DISPLAY_NAME},
+                new String[]{Contacts._ID, Contacts.DISPLAY_NAME,
+                        Contacts.DISPLAY_NAME_ALTERNATIVE},
                 whereBuilder.toString(), whereArgs, null);
 
         String name = null;
+        String nameAlt = null;
         long contactId = 0;
         try {
             if (cursor.moveToFirst()) {
                 contactId = cursor.getLong(0);
                 name = cursor.getString(1);
+                nameAlt = cursor.getString(2);
             }
             while(cursor.moveToNext()) {
                 if (cursor.getLong(0) != contactId) {
                     return null;
                 }
             }
-            return name == null ? "" : name;
+
+            final String formattedName = ContactDisplayUtils.getPreferredDisplayName(name, nameAlt,
+                    new ContactsPreferences(getApplicationContext()));
+            return formattedName == null ? "" : formattedName;
         } finally {
             if (cursor != null) {
                 cursor.close();
@@ -1533,6 +1546,11 @@
         final String name = queryNameOfLinkedContacts(new long[] {contactId1, contactId2});
         Intent callbackIntent = intent.getParcelableExtra(EXTRA_CALLBACK_INTENT);
         if (success && name != null) {
+            if (TextUtils.isEmpty(name)) {
+                showToast(R.string.contactsJoinedMessage);
+            } else {
+                showToast(R.string.contactsJoinedNamedMessage, name);
+            }
             Uri uri = RawContacts.getContactLookupUri(resolver,
                     ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactIds[0]));
             callbackIntent.setData(uri);
@@ -1698,6 +1716,22 @@
     }
 
     /**
+     * Shows a toast on the UI thread by formatting messageId using args.
+     * @param messageId id of message string
+     * @param args args to format string
+     */
+    private void showToast(final int messageId, final Object... args) {
+        final String message = getResources().getString(messageId, args);
+        mMainHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                Toast.makeText(ContactSaveService.this, message, Toast.LENGTH_LONG).show();
+            }
+        });
+    }
+
+
+    /**
      * Shows a toast on the UI thread.
      */
     private void showToast(final int message) {