Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f695eb38 authored by Tingting Wang's avatar Tingting Wang
Browse files

Editor should only show one name field.

BUG 24974860

Change-Id: Iaefd1fc42f440ca378aa4cc91b47e6688739107f
parent d7f9b649
Loading
Loading
Loading
Loading
+6 −19
Original line number Diff line number Diff line
@@ -25,10 +25,12 @@ import com.android.contacts.common.model.dataitem.DataKind;

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 @@ public class CompactKindSectionView extends LinearLayout {
        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 @@ public class CompactKindSectionView extends LinearLayout {
        }
        // 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,
+15 −10
Original line number Diff line number Diff line
@@ -686,6 +686,7 @@ public class CompactRawContactsEditorView extends LinearLayout implements View.O
        mViewIdGenerator = viewIdGenerator;
        mPhotoId = photoId;
        mReadOnlyDisplayName = readOnlyDisplayName;

        mHasNewContact = hasNewContact;
        mIsUserProfile = isUserProfile;
        mPrimaryAccount = primaryAccount;
@@ -762,12 +763,6 @@ public class CompactRawContactsEditorView extends LinearLayout implements View.O
                        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 @@ public class CompactRawContactsEditorView extends LinearLayout implements View.O
    }

    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 @@ public class CompactRawContactsEditorView extends LinearLayout implements View.O
            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)) {
+2 −19
Original line number Diff line number Diff line
@@ -43,13 +43,7 @@ public class KindSectionDataList extends ArrayList<KindSectionData> {
     */
    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 @@ public class KindSectionDataList extends ArrayList<KindSectionData> {
        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 @@ public class KindSectionDataList extends ArrayList<KindSectionData> {
        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);