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/res/values/strings.xml b/res/values/strings.xml
index 13d2f61..0618b55 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -169,7 +169,10 @@
<!-- List separator for the Join Contact list: A-Z -->
<string name="separatorJoinAggregateAll">All contacts</string>
- <!-- Toast shown after two contacts have been linked by a user action. [CHAR LIMIT=NONE] -->
+ <!-- Toast shown after two contacts have been linked by a user action with a name. [CHAR LIMIT=NONE] -->
+ <string name="contactsJoinedNamedMessage"><xliff:g id="name">%s</xliff:g> linked</string>
+
+ <!-- Toast shown after two contacts have been linked by a user action without a name. [CHAR LIMIT=NONE] -->
<string name="contactsJoinedMessage">Contacts linked</string>
<!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=30] -->
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) {
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index b63eacd..a649f2b 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -38,6 +38,7 @@
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
import android.util.Log;
import java.util.HashSet;
@@ -213,8 +214,11 @@
final String displayName = cursor.getString(COLUMN_INDEX_DISPLAY_NAME);
final String displayNameAlt = cursor.getString(COLUMN_INDEX_DISPLAY_NAME_ALT);
- names.add(ContactDisplayUtils.getPreferredDisplayName(displayName, displayNameAlt,
- contactsPreferences));
+ final String name = ContactDisplayUtils.getPreferredDisplayName(displayName,
+ displayNameAlt, contactsPreferences);
+ if (!TextUtils.isEmpty(name)) {
+ names.add(name);
+ }
contactIds.add(contactId);
final AccountType type = accountTypes.getAccountType(accountType, dataSet);