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.dataitem; 18851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 19851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.content.ContentValues; 2047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Chengimport android.content.Context; 21851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Email; 22851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Event; 23851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.GroupMembership; 24851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Identity; 25851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Im; 26851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Nickname; 27851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Note; 28851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Organization; 29851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Phone; 30851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Photo; 31851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Relation; 32851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.SipAddress; 33851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 34851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 35851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.CommonDataKinds.Website; 36851222a96b5d68602fb361ea3527101e893f67e3Maurice Chuimport android.provider.ContactsContract.Contacts.Data; 37851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 38428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.dataitem.DataKind; 39428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Cheng 40851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu/** 41851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This is the base class for data items, which represents a row from the Data table. 42851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 43851222a96b5d68602fb361ea3527101e893f67e3Maurice Chupublic class DataItem { 44851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 45851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu private final ContentValues mContentValues; 46851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 4747b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng protected DataItem(ContentValues values) { 48851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mContentValues = values; 49851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 50851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 51851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 52851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Factory for creating subclasses of DataItem objects based on the mimetype in the 53851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * content values. Raw contact is the raw contact that this data item is associated with. 54851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 5547b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng public static DataItem createFrom(ContentValues values) { 56851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu final String mimeType = values.getAsString(Data.MIMETYPE); 57851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) { 5847b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new GroupMembershipDataItem(values); 59851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) { 6047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new StructuredNameDataItem(values); 61851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) { 6247b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new PhoneDataItem(values); 63851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) { 6447b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new EmailDataItem(values); 65851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) { 6647b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new StructuredPostalDataItem(values); 67851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) { 6847b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new ImDataItem(values); 69851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) { 7047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new OrganizationDataItem(values); 71851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) { 7247b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new NicknameDataItem(values); 73851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)) { 7447b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new NoteDataItem(values); 75851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) { 7647b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new WebsiteDataItem(values); 77851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) { 7847b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new SipAddressDataItem(values); 79851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) { 8047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new EventDataItem(values); 81851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Relation.CONTENT_ITEM_TYPE.equals(mimeType)) { 8247b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new RelationDataItem(values); 83851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Identity.CONTENT_ITEM_TYPE.equals(mimeType)) { 8447b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new IdentityDataItem(values); 85851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) { 8647b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new PhotoDataItem(values); 87851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 88851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 89851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu // generic 9047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng return new DataItem(values); 91851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 92851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 93851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public ContentValues getContentValues() { 94851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues; 95851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 96851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 97851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setRawContactId(long rawContactId) { 98851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mContentValues.put(Data.RAW_CONTACT_ID, rawContactId); 99851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 100851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 101851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 102851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the data id. 103851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 104851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getId() { 105851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues.getAsLong(Data._ID); 106851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 107851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 108851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public long getRawContactId() { 109851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues.getAsLong(Data.RAW_CONTACT_ID); 110851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 111851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 112851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * Returns the mimetype of the data. 113851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 114851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public String getMimeType() { 115851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues.getAsString(Data.MIMETYPE); 116851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 117851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 118851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public void setMimeType(String mimeType) { 119851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu mContentValues.put(Data.MIMETYPE, mimeType); 120851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 121851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 122851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isPrimary() { 123851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu Integer primary = mContentValues.getAsInteger(Data.IS_PRIMARY); 124851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return primary != null && primary != 0; 125851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 126851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 127851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public boolean isSuperPrimary() { 128851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu Integer superPrimary = mContentValues.getAsInteger(Data.IS_SUPER_PRIMARY); 129851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return superPrimary != null && superPrimary != 0; 130851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 131851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 132851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu public int getDataVersion() { 133851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues.getAsInteger(Data.DATA_VERSION); 134851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 135851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 13647b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng public boolean hasKindTypeColumn(DataKind kind) { 13747b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng final String key = kind.typeColumn; 138851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return key != null && mContentValues.containsKey(key); 139851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 140851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 14147b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng public int getKindTypeColumn(DataKind kind) { 14247b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng final String key = kind.typeColumn; 143851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return mContentValues.getAsInteger(key); 144851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 145851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu 146851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu /** 147851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu * This builds the data string depending on the type of data item by using the generic 14847b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng * DataKind object underneath. 149851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu */ 15047b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng public String buildDataString(Context context, DataKind kind) { 151851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu if (kind.actionBody == null) { 152851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return null; 153851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 15447b6f70eadb118d815b4aaf5426c070bd75a38fbChiao Cheng CharSequence actionBody = kind.actionBody.inflateUsing(context, mContentValues); 155851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu return actionBody == null ? null : actionBody.toString(); 156851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu } 157b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee 158b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee /** 159b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee * This builds the data string(intended for display) depending on the type of data item. It 160b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee * returns the same value as {@link #buildDataString} by default, but certain data items can 161b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee * override it to provide their version of formatted data strings. 162b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee * 163b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee * @return Data string representing the data item, possibly formatted for display 164b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee */ 165b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee public String buildDataStringForDisplay(Context context, DataKind kind) { 166b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee return buildDataString(context, kind); 167b2b435a944947fbf1965c3bb7c202a97f0273259Yorke Lee } 168851222a96b5d68602fb361ea3527101e893f67e3Maurice Chu} 169