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);