14bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton/*
24bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Copyright (C) 2009 The Android Open Source Project
34bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton *
44bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License");
54bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * you may not use this file except in compliance with the License.
64bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * You may obtain a copy of the License at
74bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton *
84bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton *      http://www.apache.org/licenses/LICENSE-2.0
94bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton *
104bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * Unless required by applicable law or agreed to in writing, software
114bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS,
124bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * See the License for the specific language governing permissions and
144bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton * limitations under the License.
154bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */
164bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1718ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts.editor;
184bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
19fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikovimport android.content.ContentUris;
204bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.content.Context;
21d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawaimport android.content.res.Resources;
22fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikovimport android.net.Uri;
234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Email;
244bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Phone;
254bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.Photo;
264bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
2772af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmannimport android.provider.ContactsContract.RawContacts;
284bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.telephony.PhoneNumberUtils;
294bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.text.TextUtils;
304bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.util.AttributeSet;
314bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.view.LayoutInflater;
324bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.view.View;
33fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikovimport android.view.View.OnClickListener;
344bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.view.ViewGroup;
35fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikovimport android.widget.Button;
364bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.widget.ImageView;
374bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport android.widget.TextView;
38fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuanimport android.widget.Toast;
394bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
40e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
4179a6b5d3a885bc508b4b98c92a946fe12643c444Chiao Chengimport com.android.contacts.common.GeoUtil;
42cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactModifier;
43cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.model.RawContactDelta;
44738ff8623dc77dd91a1b9023861e924ba5e4c27eChiao Chengimport com.android.contacts.common.model.ValuesDelta;
45428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType;
46428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountWithDataSet;
47428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.dataitem.DataKind;
48e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
494bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamiltonimport java.util.ArrayList;
504bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
514bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton/**
52fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov * Custom view that displays external contacts in the edit screen.
534bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton */
542b3ee0f34801444c7d775ce747125459f69712bbDaniel Lehmannpublic class RawContactReadOnlyEditorView extends BaseRawContactEditorView
55fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        implements OnClickListener {
56ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov    private LayoutInflater mInflater;
574bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
584bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    private TextView mName;
59fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    private Button mEditExternallyButton;
604bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    private ViewGroup mGeneral;
614bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
62fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan    private View mAccountContainer;
63d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa    private ImageView mAccountIcon;
64d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa    private TextView mAccountTypeTextView;
65d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa    private TextView mAccountNameTextView;
664bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
67fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    private String mAccountName;
68fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    private String mAccountType;
692b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro    private String mDataSet;
704bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    private long mRawContactId = -1;
714bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
72fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    private Listener mListener;
73fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov
74fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    public interface Listener {
752b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        void onExternalEditorRequest(AccountWithDataSet account, Uri uri);
76fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    }
77fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov
782b3ee0f34801444c7d775ce747125459f69712bbDaniel Lehmann    public RawContactReadOnlyEditorView(Context context) {
794bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        super(context);
804bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    }
814bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
822b3ee0f34801444c7d775ce747125459f69712bbDaniel Lehmann    public RawContactReadOnlyEditorView(Context context, AttributeSet attrs) {
834bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        super(context, attrs);
844bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    }
854bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
86fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    public void setListener(Listener listener) {
87fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        mListener = listener;
88fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    }
89fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov
904bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    /** {@inheritDoc} */
914bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    @Override
924bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    protected void onFinishInflate() {
934bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        super.onFinishInflate();
944bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
954bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        mInflater = (LayoutInflater)getContext().getSystemService(
964bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton                Context.LAYOUT_INFLATER_SERVICE);
974bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
984bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        mName = (TextView) findViewById(R.id.read_only_name);
99fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        mEditExternallyButton = (Button) findViewById(R.id.button_edit_externally);
100fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        mEditExternallyButton.setOnClickListener(this);
1014bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        mGeneral = (ViewGroup)findViewById(R.id.sect_general);
1024bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
103fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan        mAccountContainer = findViewById(R.id.account_container);
104d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa        mAccountIcon = (ImageView) findViewById(R.id.account_icon);
105d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa        mAccountTypeTextView = (TextView) findViewById(R.id.account_type);
106d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa        mAccountNameTextView = (TextView) findViewById(R.id.account_name);
1074bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    }
1084bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1094bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    /**
1104bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton     * Set the internal state for this view, given a current
111851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu     * {@link RawContactDelta} state and the {@link AccountType} that
1124bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton     * apply to that state.
1134bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton     */
1144bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    @Override
115851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu    public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig,
116681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            boolean isProfile) {
1174bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Remove any existing sections
1184bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        mGeneral.removeAllViews();
1194bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1204bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Bail if invalid state or source
12169f9e6f0cd9b5401da55f251e9bd98e69643d7dfDmitri Plotnikov        if (state == null || type == null) return;
1224bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Make sure we have StructuredName
124851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        RawContactModifier.ensureKindExists(state, type, StructuredName.CONTENT_ITEM_TYPE);
1254bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1264bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Fill in the header info
127851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mAccountName = state.getAccountName();
128851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mAccountType = state.getAccountType();
129851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mDataSet = state.getDataSet();
130681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson
131681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson        if (isProfile) {
132681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            if (TextUtils.isEmpty(mAccountName)) {
1332cb71bd0d6096f48d9d8c6d66a753b164468abb2Isaac Katzenelson                mAccountNameTextView.setVisibility(View.GONE);
134681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson                mAccountTypeTextView.setText(R.string.local_profile_title);
135681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            } else {
1362cb71bd0d6096f48d9d8c6d66a753b164468abb2Isaac Katzenelson                CharSequence accountType = type.getDisplayLabel(mContext);
1372cb71bd0d6096f48d9d8c6d66a753b164468abb2Isaac Katzenelson                mAccountTypeTextView.setText(mContext.getString(R.string.external_profile_title,
1382cb71bd0d6096f48d9d8c6d66a753b164468abb2Isaac Katzenelson                        accountType));
1392cb71bd0d6096f48d9d8c6d66a753b164468abb2Isaac Katzenelson                mAccountNameTextView.setText(mAccountName);
140681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            }
141681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson        } else {
142681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            CharSequence accountType = type.getDisplayLabel(mContext);
143681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            if (TextUtils.isEmpty(accountType)) {
144681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson                accountType = mContext.getString(R.string.account_phone);
145681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            }
146681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            if (!TextUtils.isEmpty(mAccountName)) {
1472ea2ebbd23320f09ed38bf22d053842cc244646cKatherine Kuan                mAccountNameTextView.setVisibility(View.VISIBLE);
148681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson                mAccountNameTextView.setText(
149681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson                        mContext.getString(R.string.from_account_format, mAccountName));
1502ea2ebbd23320f09ed38bf22d053842cc244646cKatherine Kuan            } else {
1512ea2ebbd23320f09ed38bf22d053842cc244646cKatherine Kuan                // Hide this view so the other text view will be centered vertically
1522ea2ebbd23320f09ed38bf22d053842cc244646cKatherine Kuan                mAccountNameTextView.setVisibility(View.GONE);
153681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            }
154681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson            mAccountTypeTextView.setText(mContext.getString(R.string.account_type_format,
155681f36cc7cc49be781eedc4685eda2d1b2c0444cIsaac Katzenelson                    accountType));
1564bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        }
1571ebbd5bbe71814123b80df702b474bcd7196cbb7Katherine Kuan        mAccountTypeTextView.setTextColor(mContext.getResources().getColor(
1581ebbd5bbe71814123b80df702b474bcd7196cbb7Katherine Kuan                R.color.secondary_text_color));
1592b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro
1602b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        // TODO: Expose data set in the UI somehow?
1612b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro
162d37a891cb44cd17083c06d7be693c469403d16dfDaisuke Miyakawa        mAccountIcon.setImageDrawable(type.getDisplayIcon(mContext));
1634bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
164851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu        mRawContactId = state.getRawContactId();
1654bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1664bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        ValuesDelta primary;
1674bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1684bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Photo
16969f9e6f0cd9b5401da55f251e9bd98e69643d7dfDmitri Plotnikov        DataKind kind = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
1704bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        if (kind != null) {
171851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu            RawContactModifier.ensureKindExists(state, type, Photo.CONTENT_ITEM_TYPE);
17269f9e6f0cd9b5401da55f251e9bd98e69643d7dfDmitri Plotnikov            boolean hasPhotoEditor = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null;
173ea54a96ada15c83086e854619789ea025244f7a6Dmitri Plotnikov            setHasPhotoEditor(hasPhotoEditor);
1744bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton            primary = state.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
17596e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            getPhotoEditor().setValues(kind, primary, state, !type.areContactsWritable(), vig);
1764bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        }
1774bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1784bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Name
1794bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        primary = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
18005374affb551a2e3ad55a6d38f74d1463a3cd0e0Katherine Kuan        mName.setText(primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
18105374affb551a2e3ad55a6d38f74d1463a3cd0e0Katherine Kuan                mContext.getString(R.string.missing_name));
1824bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
1832b3ee0f34801444c7d775ce747125459f69712bbDaniel Lehmann        if (type.getEditContactActivityClassName() != null) {
18496e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            mAccountContainer.setBackgroundDrawable(null);
18596e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            mAccountContainer.setEnabled(false);
18696e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            mEditExternallyButton.setVisibility(View.VISIBLE);
18796e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        } else {
188fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan            mAccountContainer.setOnClickListener(new OnClickListener() {
189fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan                @Override
190fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan                public void onClick(View v) {
191fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan                    Toast.makeText(mContext, mContext.getString(R.string.contact_read_only),
192fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan                            Toast.LENGTH_SHORT).show();
193fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan                }
194fd70903236883f47b21f23b8cb49a1ccacdfcdf1Katherine Kuan            });
195fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov            mEditExternallyButton.setVisibility(View.GONE);
196fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        }
1974bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
198d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        final Resources res = mContext.getResources();
1994bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Phones
2004bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        ArrayList<ValuesDelta> phones = state.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
2014bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        if (phones != null) {
202d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner            boolean isFirstPhoneBound = true;
203d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner            for (ValuesDelta phone : phones) {
204d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                final String phoneNumber = phone.getPhoneNumber();
205d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                if (TextUtils.isEmpty(phoneNumber)) {
206d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                    continue;
207d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                }
208d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                final String formattedNumber = PhoneNumberUtils.formatNumber(
209d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                        phoneNumber, phone.getPhoneNormalizedNumber(),
21079a6b5d3a885bc508b4b98c92a946fe12643c444Chiao Cheng                        GeoUtil.getCurrentCountryIso(getContext()));
211d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                CharSequence phoneType = null;
212851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                if (phone.phoneHasType()) {
213d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa                    phoneType = Phone.getTypeLabel(
214851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                            res, phone.getPhoneType(), phone.getPhoneLabel());
215d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa                }
216d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                bindData(mContext.getText(R.string.phoneLabelsGroup), formattedNumber,
217d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                        phoneType, isFirstPhoneBound, true);
218d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                isFirstPhoneBound = false;
2194bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton            }
2204bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        }
2214bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
2224bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Emails
2234bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        ArrayList<ValuesDelta> emails = state.getMimeEntries(Email.CONTENT_ITEM_TYPE);
2244bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        if (emails != null) {
225d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner            boolean isFirstEmailBound = true;
226d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner            for (ValuesDelta email : emails) {
227851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                final String emailAddress = email.getEmailData();
228d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                if (TextUtils.isEmpty(emailAddress)) {
229d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                    continue;
230d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                }
231d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                CharSequence emailType = null;
232851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                if (email.emailHasType()) {
233d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa                    emailType = Email.getTypeLabel(
234851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu                            res, email.getEmailType(), email.getEmailLabel());
235d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa                }
2362b3ee0f34801444c7d775ce747125459f69712bbDaniel Lehmann                bindData(mContext.getText(R.string.emailLabelsGroup), emailAddress, emailType,
237d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                        isFirstEmailBound);
238d7ab82f8303c0d7943db602a01ebdbb9244222e0Jay Shrauner                isFirstEmailBound = false;
2394bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton            }
2404bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        }
2414bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
2424bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        // Hide mGeneral if it's empty
2434bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        if (mGeneral.getChildCount() > 0) {
2444bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton            mGeneral.setVisibility(View.VISIBLE);
2454bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        } else {
2464bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton            mGeneral.setVisibility(View.GONE);
2474bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        }
2484bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    }
2494bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton
250cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee    private void bindData(CharSequence titleText, CharSequence data, CharSequence type,
251cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee            boolean isFirstEntry) {
252cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee        bindData(titleText, data, type, isFirstEntry, false);
253cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee    }
254cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee
255cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee    private void bindData(CharSequence titleText, CharSequence data, CharSequence type,
256cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee            boolean isFirstEntry, boolean forceLTR) {
257d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        final View field = mInflater.inflate(R.layout.item_read_only_field, mGeneral, false);
2582d3b14ebe4421117d62b784cc37577e58c4d1a9bDaisuke Miyakawa        final View divider = field.findViewById(R.id.divider);
259d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        if (isFirstEntry) {
260d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            final TextView titleView = (TextView) field.findViewById(R.id.kind_title);
261d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            titleView.setText(titleText);
2622d3b14ebe4421117d62b784cc37577e58c4d1a9bDaisuke Miyakawa            divider.setVisibility(View.GONE);
263d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        } else {
264d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            View titleContainer = field.findViewById(R.id.kind_title_layout);
265d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            titleContainer.setVisibility(View.GONE);
2662d3b14ebe4421117d62b784cc37577e58c4d1a9bDaisuke Miyakawa            divider.setVisibility(View.VISIBLE);
267d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        }
268d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        final TextView dataView = (TextView) field.findViewById(R.id.data);
269d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        dataView.setText(data);
270cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee        if (forceLTR) {
271cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee            dataView.setTextDirection(View.TEXT_DIRECTION_LTR);
272cbfb11288368bca3a6e350ae880d53ffb4907b78Yorke Lee        }
273d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        final TextView typeView = (TextView) field.findViewById(R.id.type);
274d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        if (!TextUtils.isEmpty(type)) {
275d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            typeView.setText(type);
276d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        } else {
277d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa            typeView.setVisibility(View.GONE);
278d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        }
279d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa
280d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa        mGeneral.addView(field);
281d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa    }
282d525aee2dbea0e002f8e499b3ef1d42e503d0059Daisuke Miyakawa
2834bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    @Override
2844bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    public long getRawContactId() {
2854bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton        return mRawContactId;
2864bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton    }
287fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov
288fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    @Override
289fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    public void onClick(View v) {
290fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        if (v.getId() == R.id.button_edit_externally) {
291fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov            if (mListener != null) {
2922b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                mListener.onExternalEditorRequest(
2932b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro                        new AccountWithDataSet(mAccountName, mAccountType, mDataSet),
294fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov                        ContentUris.withAppendedId(RawContacts.CONTENT_URI, mRawContactId));
295fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov            }
296fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov        }
297fff6f07a02d3e3bbeff2ecf94a703782b71aea66Dmitri Plotnikov    }
2984bef56bdbde4c6bd439ed2d528d4b99974359e18Jeff Hamilton}
299