Return display_name after joining multiple contacts.
The ContactSaveService includes the display name of the resulting
contact in the data bundle when several contacts are joined.
Bug: 29687036
Change-Id: I14c0ae151178d279a4c0c71f574247cc645cfea9
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 8683809..bfb684a 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -112,6 +112,7 @@
public static final String EXTRA_CONTACT_URI = "contactUri";
public static final String EXTRA_CONTACT_IDS = "contactIds";
public static final String EXTRA_STARRED_FLAG = "starred";
+ public static final String EXTRA_DISPLAY_NAME = "extraDisplayName";
public static final String ACTION_SET_SUPER_PRIMARY = "setSuperPrimary";
public static final String ACTION_CLEAR_PRIMARY = "clearPrimary";
@@ -1293,6 +1294,7 @@
private void joinSeveralContacts(Intent intent) {
final long[] contactIds = intent.getLongArrayExtra(EXTRA_CONTACT_IDS);
+
final ResultReceiver receiver = intent.getParcelableExtra(EXTRA_RESULT_RECEIVER);
// Load raw contact IDs for all contacts involved.
@@ -1334,15 +1336,39 @@
}
return;
}
+
if (receiver != null) {
final Bundle result = new Bundle();
result.putSerializable(EXTRA_RAW_CONTACT_IDS, separatedRawContactIds);
+ result.putString(EXTRA_DISPLAY_NAME, queryNameOfLinkedContacts(contactIds));
receiver.send(CONTACTS_LINKED, result);
} else {
showToast(R.string.contactsJoinedMessage);
}
}
+ // Get the display name of the top-level contact after the contacts have been linked.
+ private String queryNameOfLinkedContacts(long[] contactIds) {
+ final StringBuilder whereBuilder = new StringBuilder(Contacts._ID).append(" IN (");
+ final String[] whereArgs = new String[contactIds.length];
+ for (int i = 0; i < contactIds.length; i++) {
+ whereArgs[i] = String.valueOf(contactIds[i]);
+ whereBuilder.append("?,");
+ }
+ whereBuilder.deleteCharAt(whereBuilder.length() - 1).append(')');
+ final Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
+ new String[]{Contacts.DISPLAY_NAME}, whereBuilder.toString(), whereArgs, null);
+ try {
+ if (cursor.moveToFirst()) {
+ return cursor.getString(0);
+ }
+ return null;
+ } finally {
+ cursor.close();
+ }
+ }
+
+
/** Returns true if the batch was successfully applied and false otherwise. */
private boolean applyOperations(ContentResolver resolver,
ArrayList<ContentProviderOperation> operations) {