New rule for the fields "organization" and "nickname": If they merely duplicate the title, don't show them
Bug:2534647
Change-Id: I65882a7b626265cc310547f3947cec61be4c11be
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index 000f129..b94ad98 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -58,6 +58,7 @@
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.DisplayNameSources;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.RawContactsEntity;
import android.provider.ContactsContract.StatusUpdates;
@@ -83,10 +84,8 @@
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
-import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
-import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
@@ -155,6 +154,9 @@
private boolean mHasEntities = false;
private boolean mHasStatuses = false;
+ private long mNameRawContactId = -1;
+ private int mDisplayNameSource = DisplayNameSources.UNDEFINED;
+
private ArrayList<Entity> mEntities = Lists.newArrayList();
private HashMap<Long, DataStatus> mStatuses = Maps.newHashMap();
@@ -389,11 +391,24 @@
final Uri dataUri = Uri.withAppendedPath(uri, Contacts.Data.CONTENT_DIRECTORY);
- // Keep stub cursor open on side to watch for change events
+ // This cursor has two purposes:
+ // - Fetch NAME_RAW_CONTACT_ID and DISPLAY_NAME_SOURCE
+ // - Watcher for change events
mCursor = mResolver.query(dataUri,
- new String[] {Contacts.DISPLAY_NAME}, null, null, null);
- mCursor.registerContentObserver(mObserver);
+ new String[] { Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE },
+ null, null, null);
+ if (mCursor.moveToFirst()) {
+ mNameRawContactId =
+ mCursor.getLong(mCursor.getColumnIndex(Contacts.NAME_RAW_CONTACT_ID));
+ mDisplayNameSource =
+ mCursor.getInt(mCursor.getColumnIndex(Contacts.DISPLAY_NAME_SOURCE));
+ } else {
+ mNameRawContactId = -1;
+ mDisplayNameSource = DisplayNameSources.UNDEFINED;
+ }
+
+ mCursor.registerContentObserver(mObserver);
final long contactId = ContentUris.parseId(uri);
// Clear flags and start queries to data and status
@@ -637,15 +652,6 @@
}
}
- private void splitContact(long rawContactId) {
- setAggregationException(rawContactId, AggregationExceptions.TYPE_KEEP_SEPARATE);
-
- // The split operation may have removed the original aggregate contact, so we need
- // to requery everything
- Toast.makeText(this, R.string.contactsSplitMessage, Toast.LENGTH_LONG).show();
- startEntityQuery();
- }
-
private void joinAggregate(final long contactId) {
Cursor c = mResolver.query(RawContacts.CONTENT_URI, new String[] {RawContacts._ID},
RawContacts.CONTACT_ID + "=" + contactId, null, null);
@@ -902,12 +908,29 @@
} else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType) &&
(hasData || !TextUtils.isEmpty(entry.label))) {
// Build organization entries
- entry.uri = null;
- mOrganizationEntries.add(entry);
+ final boolean isNameRawContact = (mNameRawContactId == rawContactId);
+
+ final boolean duplicatesTitle =
+ isNameRawContact
+ && mDisplayNameSource == DisplayNameSources.ORGANIZATION
+ && !hasData;
+
+ if (!duplicatesTitle) {
+ entry.uri = null;
+ mOrganizationEntries.add(entry);
+ }
} else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build nickname entries
- entry.uri = null;
- mNicknameEntries.add(entry);
+ final boolean isNameRawContact = (mNameRawContactId == rawContactId);
+
+ final boolean duplicatesTitle =
+ isNameRawContact
+ && mDisplayNameSource == DisplayNameSources.NICKNAME;
+
+ if (!duplicatesTitle) {
+ entry.uri = null;
+ mNicknameEntries.add(entry);
+ }
} else if (Note.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build note entries
entry.uri = null;