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