Editor should only show one name field.
BUG 24974860
Change-Id: Iaefd1fc42f440ca378aa4cc91b47e6688739107f
diff --git a/src/com/android/contacts/editor/CompactKindSectionView.java b/src/com/android/contacts/editor/CompactKindSectionView.java
index fffe464..23a66ab 100644
--- a/src/com/android/contacts/editor/CompactKindSectionView.java
+++ b/src/com/android/contacts/editor/CompactKindSectionView.java
@@ -25,10 +25,12 @@
import android.content.Context;
import android.database.Cursor;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -344,24 +346,6 @@
final boolean readOnly = !accountType.areContactsWritable();
if (readOnly) {
- final View nameView = mLayoutInflater.inflate(
- R.layout.structured_name_readonly_editor_view, mEditors,
- /* attachToRoot =*/ false);
-
- // Display name
- ((TextView) nameView.findViewById(R.id.display_name))
- .setText(valuesDelta.getDisplayName());
-
- // Account type info
- final LinearLayout accountTypeLayout = (LinearLayout)
- nameView.findViewById(R.id.account_type);
- accountTypeLayout.setVisibility(View.VISIBLE);
- ((ImageView) accountTypeLayout.findViewById(R.id.account_type_icon))
- .setImageDrawable(accountType.getDisplayIcon(getContext()));
- ((TextView) accountTypeLayout.findViewById(R.id.account_type_name))
- .setText(accountType.getDisplayLabel(getContext()));
-
- mEditors.addView(nameView);
return;
}
@@ -557,10 +541,13 @@
}
// Add a new empty editor
if (mShowOneEmptyEditor) {
+ final String mimeType = mKindSectionDataList.getMimeType();
+ if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && mEditors.getChildCount() > 0) {
+ return;
+ }
final RawContactDelta rawContactDelta =
mKindSectionDataList.get(0).getRawContactDelta();
final ValuesDelta values = RawContactModifier.insertChild(rawContactDelta, dataKind);
- final String mimeType = mKindSectionDataList.getMimeType();
final Editor.EditorListener editorListener = Event.CONTENT_ITEM_TYPE.equals(mimeType)
? new EventEditorListener() : new NonNameEditorListener();
final View view = addNonNameEditorView(rawContactDelta, dataKind, values,
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 2bdd212..386a6b3 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -686,6 +686,7 @@
mViewIdGenerator = viewIdGenerator;
mPhotoId = photoId;
mReadOnlyDisplayName = readOnlyDisplayName;
+
mHasNewContact = hasNewContact;
mIsUserProfile = isUserProfile;
mPrimaryAccount = primaryAccount;
@@ -762,12 +763,6 @@
new KindSectionData(accountType, dataKind, rawContactDelta);
kindSectionDataList.add(kindSectionData);
- // Note we must create nickname entries
- if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)
- && kindSectionData.getValuesDeltas().isEmpty()) {
- RawContactModifier.insertChild(rawContactDelta, dataKind);
- }
-
vlog("parse: " + i + " " + dataKind.mimeType + " " +
kindSectionData.getValuesDeltas().size() + " value(s)");
}
@@ -775,9 +770,6 @@
}
private KindSectionDataList getOrCreateKindSectionDataList(String mimeType) {
- // Put structured names and nicknames together
- mimeType = Nickname.CONTENT_ITEM_TYPE.equals(mimeType)
- ? StructuredName.CONTENT_ITEM_TYPE : mimeType;
KindSectionDataList kindSectionDataList = mKindSectionDataMap.get(mimeType);
if (kindSectionDataList == null) {
kindSectionDataList = new KindSectionDataList();
@@ -1009,7 +1001,20 @@
i++;
final String mimeType = entry.getKey();
- final KindSectionDataList kindSectionDataList = entry.getValue();
+ KindSectionDataList kindSectionDataList = entry.getValue();
+ if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ // Only show one name editor view. Select one matched name to display according to
+ // the order: super primary name, first non-empty name, first empty name, null.
+ // The name should be the name displayed in Quick contact.
+ final Pair<KindSectionData,ValuesDelta> nameToDisplay =
+ kindSectionDataList.getEntryToDisplay(0L);
+ if (nameToDisplay != null) {
+ final KindSectionData nameKindSectionData = nameToDisplay.first;
+ kindSectionDataList = new KindSectionDataList();
+ kindSectionDataList.add(nameKindSectionData);
+ }
+ }
+
// Ignore mime types that we've already handled
if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
diff --git a/src/com/android/contacts/editor/KindSectionDataList.java b/src/com/android/contacts/editor/KindSectionDataList.java
index 3658f21..73cd42c 100644
--- a/src/com/android/contacts/editor/KindSectionDataList.java
+++ b/src/com/android/contacts/editor/KindSectionDataList.java
@@ -43,13 +43,7 @@
*/
public String getMimeType() {
if (isEmpty()) return null;
- final String mimeType = get(0).getDataKind().mimeType;
- // StructuredNames and Nicknames are a special case and go together under the
- // StructuredName mime type
- if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
- return StructuredName.CONTENT_ITEM_TYPE;
- }
- return mimeType;
+ return get(0).getDataKind().mimeType;
}
/**
@@ -161,12 +155,7 @@
final String listMimeType = getMimeType();
if (listMimeType != null) {
final String newEntryMimeType = kindSectionData.getDataKind().mimeType;
- if (isNameMimeType(listMimeType)) {
- if (!isNameMimeType(newEntryMimeType)) {
- throw new IllegalArgumentException(
- "Can't add " + newEntryMimeType + " to list with type " + listMimeType);
- }
- } else if (!listMimeType.equals(newEntryMimeType)) {
+ if (!listMimeType.equals(newEntryMimeType)) {
throw new IllegalArgumentException(
"Can't add " + newEntryMimeType + " to list with type " + listMimeType);
}
@@ -174,12 +163,6 @@
return super.add(kindSectionData);
}
- // StructuredNames and Nicknames are a special case and go together
- private static boolean isNameMimeType(String mimeType) {
- return StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)
- || Nickname.CONTENT_ITEM_TYPE.equals(mimeType);
- }
-
private static void vlog(String message) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, message);