1851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu/* 2851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Copyright (C) 2012 The Android Open Source Project 3851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 4851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Licensed under the Apache License, Version 2.0 (the "License"); 5851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * you may not use this file except in compliance with the License. 6851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * You may obtain a copy of the License at 7851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 8851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * http://www.apache.org/licenses/LICENSE-2.0 9851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 10851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Unless required by applicable law or agreed to in writing, software 11851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * distributed under the License is distributed on an "AS IS" BASIS, 12851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * See the License for the specific language governing permissions and 14851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * limitations under the License. 15851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 16851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 17851222a96b5d68602fb361ea3527101e893f67e3Maurice Chupackage com.android.contacts.model; 18851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 19851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.ContentValues; 20851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.Context; 21851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.Entity; 22851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.net.Uri; 23851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.Contacts; 24851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.Data; 25851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.RawContacts; 26851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 27851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.account.AccountType; 28851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.account.AccountWithDataSet; 29851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport com.android.contacts.model.dataitem.DataItem; 30851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 31851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport java.util.ArrayList; 32851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport java.util.List; 33851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 34851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu/** 35851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * RawContact represents a single raw contact in the raw contacts database. 36851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * It has specialized getters/setters for raw contact 37851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * items, and also contains a collection of DataItem objects. A RawContact contains the information 38851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * from a single account. 39851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 40851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This allows RawContact objects to be thought of as a class with raw contact 41851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * fields (like account type, name, data set, sync state, etc.) and a list of 42851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * DataItem objects that represent contact information elements (like phone 43851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * numbers, email, address, etc.). 44851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 45851222a96b5d68602fb361ea3527101e893f67e3Maurice Chupublic class RawContact { 46851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 47851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final Context mContext; 48851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private AccountTypeManager mAccountTypeManager; 49851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final ContentValues mValues; 50851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final ArrayList<NamedDataItem> mDataItems; 51851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 52851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public static class NamedDataItem { 53851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public final Uri uri; 54851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public final DataItem dataItem; 55851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 56851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public NamedDataItem(Uri uri, DataItem dataItem) { 57851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu this.uri = uri; 58851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu this.dataItem = dataItem; 59851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 60851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 61851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 62851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public static RawContact createFrom(Entity entity) { 63851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final ContentValues values = entity.getEntityValues(); 64851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final ArrayList<Entity.NamedContentValues> subValues = entity.getSubValues(); 65851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 66851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu RawContact rawContact = new RawContact(null, values); 67851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu for (Entity.NamedContentValues subValue : subValues) { 68851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu rawContact.addNamedDataItemValues(subValue.uri, subValue.values); 69851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 70851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return rawContact; 71851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 72851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 73851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 74851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * A RawContact object can be created with or without a context. 75851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 76851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * The context is used for the buildString() member function in DataItem objects, 77851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * specifically for retrieving an instance of AccountTypeManager. It is okay to 78851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * pass in null for the context in which case, you will not be able to call buildString(), 79851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * getDataKind(), or getAccountType() from a DataItem object. 80851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 81851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public RawContact(Context context) { 82851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu this(context, new ContentValues()); 83851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 84851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 85851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public RawContact(Context context, ContentValues values) { 86851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mContext = context; 87851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mValues = values; 88851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mDataItems = new ArrayList<NamedDataItem>(); 89851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 90851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 91851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public AccountTypeManager getAccountTypeManager() { 92851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (mAccountTypeManager == null) { 93851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mAccountTypeManager = AccountTypeManager.getInstance(mContext); 94851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 95851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mAccountTypeManager; 96851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 97851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 98851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Context getContext() { 99851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContext; 100851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 101851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 102851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ContentValues getValues() { 103851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mValues; 104851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 105851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 106851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 107851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the id of the raw contact. 108851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 109851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public Long getId() { 110851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsLong(RawContacts._ID); 111851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 112851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 113851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 114851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the account name of the raw contact. 115851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 116851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getAccountName() { 117851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.ACCOUNT_NAME); 118851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 119851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 120851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 121851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the account type of the raw contact. 122851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 123851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getAccountTypeString() { 124851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.ACCOUNT_TYPE); 125851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 126851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 127851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 128851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the data set of the raw contact. 129851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 130851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getDataSet() { 131851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.DATA_SET); 132851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 133851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 134851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 135851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the account type and data set of the raw contact. 136851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 137851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getAccountTypeAndDataSetString() { 138851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.ACCOUNT_TYPE_AND_DATA_SET); 139851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 140851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 141851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isDirty() { 142851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsBoolean(RawContacts.DIRTY); 143851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 144851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 145851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getVersion() { 146851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsLong(RawContacts.DIRTY); 147851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 148851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 149851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getSourceId() { 150851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.SOURCE_ID); 151851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 152851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 153851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getSync1() { 154851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.SYNC1); 155851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 156851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 157851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getSync2() { 158851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.SYNC2); 159851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 160851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 161851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getSync3() { 162851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.SYNC3); 163851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 164851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 165851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getSync4() { 166851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsString(RawContacts.SYNC4); 167851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 168851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 169851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isDeleted() { 170851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsBoolean(RawContacts.DELETED); 171851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 172851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 173851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isNameVerified() { 174851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsBoolean(RawContacts.NAME_VERIFIED); 175851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 176851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 177851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getContactId() { 178851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsLong(Contacts.Entity.CONTACT_ID); 179851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 180851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 181851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isStarred() { 182851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getValues().getAsBoolean(Contacts.STARRED); 183851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 184851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 185851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public AccountType getAccountType() { 186851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return getAccountTypeManager().getAccountType(getAccountTypeString(), getDataSet()); 187851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 188851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 189851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 190851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Sets the account name, account type, and data set strings. 191851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Valid combinations for account-name, account-type, data-set 192851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 1) null, null, null (local account) 193851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 2) non-null, non-null, null (valid account without data-set) 194851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * 3) non-null, non-null, non-null (valid account with data-set) 195851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 196851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private void setAccount(String accountName, String accountType, String dataSet) { 197851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final ContentValues values = getValues(); 198851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (accountName == null) { 199851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (accountType == null && dataSet == null) { 200851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // This is a local account 201851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.putNull(RawContacts.ACCOUNT_NAME); 202851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.putNull(RawContacts.ACCOUNT_TYPE); 203851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.putNull(RawContacts.DATA_SET); 204851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return; 205851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 206851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else { 207851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (accountType != null) { 208851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // This is a valid account, either with or without a dataSet. 209851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.put(RawContacts.ACCOUNT_NAME, accountName); 210851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.put(RawContacts.ACCOUNT_TYPE, accountType); 211851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (dataSet == null) { 212851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.putNull(RawContacts.DATA_SET); 213851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else { 214851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu values.put(RawContacts.DATA_SET, dataSet); 215851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 21659b83fa3647dd104df899953321a4c37945448a4Geobio Boo return; 217851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 218851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 219851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu throw new IllegalArgumentException( 220851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu "Not a valid combination of account name, type, and data set."); 221851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 222851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 223851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setAccount(AccountWithDataSet accountWithDataSet) { 224851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu setAccount(accountWithDataSet.name, accountWithDataSet.type, accountWithDataSet.dataSet); 225851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 226851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 227851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setAccountToLocal() { 228851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu setAccount(null, null, null); 229851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 230851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 23110bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu /** 23210bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu * Creates and inserts a DataItem object that wraps the content values, and returns it. 23310bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu */ 23410bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu public DataItem addDataItemValues(ContentValues values) { 23510bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu final NamedDataItem namedItem = addNamedDataItemValues(Data.CONTENT_URI, values); 23610bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu return namedItem.dataItem; 237851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 238851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 23910bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu public NamedDataItem addNamedDataItemValues(Uri uri, ContentValues values) { 24010bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu final NamedDataItem namedItem = new NamedDataItem(uri, DataItem.createFrom(this, values)); 24110bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu mDataItems.add(namedItem); 24210bf684e0c9022d80b04d9cc69665c6341677beaMaurice Chu return namedItem; 243851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 244851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 245851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public List<DataItem> getDataItems() { 246851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final ArrayList<DataItem> list = new ArrayList<DataItem>(); 247851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu for (NamedDataItem dataItem : mDataItems) { 248851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (Data.CONTENT_URI.equals(dataItem.uri)) { 249851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu list.add(dataItem.dataItem); 250851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 251851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 252851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return list; 253851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 254851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 255851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public List<NamedDataItem> getNamedDataItems() { 256851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mDataItems; 257851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 258851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 259851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String toString() { 260851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final StringBuilder sb = new StringBuilder(); 261851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu sb.append("RawContact: ").append(mValues); 262851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu for (RawContact.NamedDataItem namedDataItem : mDataItems) { 263851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu sb.append("\n ").append(namedDataItem.uri); 264851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu sb.append("\n -> ").append(namedDataItem.dataItem.getContentValues()); 265851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 266851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return sb.toString(); 267851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 268851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu} 269