16ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa/* 26ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project 36ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * 46ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 56ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * you may not use this file except in compliance with the License. 66ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * You may obtain a copy of the License at 76ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * 86ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 96ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * 106ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 116ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 126ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * See the License for the specific language governing permissions and 146ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * limitations under the License. 156ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa */ 166ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 176ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawapackage com.android.ex.chips; 186ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 1974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawaimport android.net.Uri; 207211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email; 2100adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onukiimport android.provider.ContactsContract.DisplayNameSources; 22d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedyimport android.text.util.Rfc822Token; 23d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedyimport android.text.util.Rfc822Tokenizer; 2474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 256ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa/** 266ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Represents one entry inside recipient auto-complete list. 276ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa */ 28f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereirapublic class RecipientEntry { 297211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa /* package */ static final int INVALID_CONTACT = -1; 3001382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira /** 3101382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * A GENERATED_CONTACT is one that was created based entirely on 3201382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * information passed in to the RecipientEntry from an external source 3301382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * that is not a real contact. 3401382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira */ 357211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa /* package */ static final int GENERATED_CONTACT = -2; 367211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa 377211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa /** Used when {@link #mDestinationType} is invalid and thus shouldn't be used for display. */ 388af0d3b6f34e03c08c8e67be2190da01c59889daAndrew Sapperstein public static final int INVALID_DESTINATION_TYPE = -1; 3974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 4074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa public static final int ENTRY_TYPE_PERSON = 0; 4174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 42c0e3599d01a4bcfa900ad8dab8becc349e25ad82Mindy Pereira public static final int ENTRY_TYPE_SIZE = 1; 4374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 4474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa private final int mEntryType; 456ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 466ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa /** 476ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * True when this entry is the first entry in a group, which should have a photo and display 486ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * name, while the second or later entries won't. 496ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa */ 506ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa private boolean mIsFirstLevel; 516ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa private final String mDisplayName; 5200adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki 536ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa /** Destination for this contact entry. Would be an email address or a phone number. */ 546ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa private final String mDestination; 557211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa /** Type of the destination like {@link Email#TYPE_HOME} */ 567211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa private final int mDestinationType; 577211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa /** 587211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa * Label of the destination which will be used when type was {@link Email#TYPE_CUSTOM}. 597211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa * Can be null when {@link #mDestinationType} is {@link #INVALID_DESTINATION_TYPE}. 607211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa */ 617211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa private final String mDestinationLabel; 627537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa /** ID for the person */ 63f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa private final long mContactId; 647a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy /** ID for the directory this contact came from, or <code>null</code> */ 657a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy private final Long mDirectoryId; 667537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa /** ID for the destination */ 67f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa private final long mDataId; 686ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa private final boolean mIsDivider; 6974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 7074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa private final Uri mPhotoThumbnailUri; 7174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 72ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp private boolean mIsValid; 7374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa /** 7474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa * This can be updated after this object being constructed, when the photo is fetched 7574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa * from remote directories. 7674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa */ 776ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa private byte[] mPhotoBytes; 786ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 798af0d3b6f34e03c08c8e67be2190da01c59889daAndrew Sapperstein /** See {@link android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} */ 807a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy private final String mLookupKey; 81514f8a75f72fa2e735418ffb5d6e30aa914fbe7bScott Kennedy 828af0d3b6f34e03c08c8e67be2190da01c59889daAndrew Sapperstein protected RecipientEntry(int entryType, String displayName, String destination, 837a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy int destinationType, String destinationLabel, long contactId, Long directoryId, 847a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy long dataId, Uri photoThumbnailUri, boolean isFirstLevel, boolean isValid, 857a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy String lookupKey) { 8674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa mEntryType = entryType; 876b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira mIsFirstLevel = isFirstLevel; 886ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa mDisplayName = displayName; 896ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa mDestination = destination; 907211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa mDestinationType = destinationType; 917211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa mDestinationLabel = destinationLabel; 926ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa mContactId = contactId; 937a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy mDirectoryId = directoryId; 947537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa mDataId = dataId; 9574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa mPhotoThumbnailUri = photoThumbnailUri; 9674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa mPhotoBytes = null; 976ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa mIsDivider = false; 98ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp mIsValid = isValid; 997a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy mLookupKey = lookupKey; 100ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp } 101ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp 102ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp public boolean isValid() { 103ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp return mIsValid; 1046ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 1056ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 106f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira /** 10701382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * Determine if this was a RecipientEntry created from recipient info or 10801382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * an entry from contacts. 10901382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira */ 11001382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira public static boolean isCreatedRecipient(long id) { 11101382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira return id == RecipientEntry.INVALID_CONTACT || id == RecipientEntry.GENERATED_CONTACT; 11201382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira } 11301382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira 11401382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira /** 115f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira * Construct a RecipientEntry from just an address that has been entered. 116f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira * This address has not been resolved to a contact and therefore does not 117f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira * have a contact id or photo. 118f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira */ 119d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedy public static RecipientEntry constructFakeEntry(final String address, final boolean isValid) { 120d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedy final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(address); 121b7391a61487da625f371164257afb91636326b6cTom Taylor final String tokenizedAddress = tokens.length > 0 ? tokens[0].getAddress() : address; 122d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedy 123d2240c52c38d67ee6c340d625a240ded51e2ddaeScott Kennedy return new RecipientEntry(ENTRY_TYPE_PERSON, tokenizedAddress, tokenizedAddress, 1247a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy INVALID_DESTINATION_TYPE, null, INVALID_CONTACT, null /* directoryId */, 1257a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy INVALID_CONTACT, null, true, isValid, null /* lookupKey */); 12601382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira } 12701382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira 12801382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira /** 1290ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor * Construct a RecipientEntry from just a phone number. 1300ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor */ 1310ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor public static RecipientEntry constructFakePhoneEntry(final String phoneNumber, 1320ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor final boolean isValid) { 1330ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor return new RecipientEntry(ENTRY_TYPE_PERSON, phoneNumber, phoneNumber, 1347a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy INVALID_DESTINATION_TYPE, null, INVALID_CONTACT, null /* directoryId */, 1357a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy INVALID_CONTACT, null, true, isValid, null /* lookupKey */); 1360ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor } 1370ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor 1380ba9133c904b8c35af8209a54604331cd671bc1fTom Taylor /** 13900adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki * @return the display name for the entry. If the display name source is larger than 14000adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki * {@link DisplayNameSources#PHONE} we use the contact's display name, but if not, 14100adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki * i.e. the display name came from an email address or a phone number, we don't use it 14200adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki * to avoid confusion and just use the destination instead. 14300adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki */ 14400adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki private static String pickDisplayName(int displayNameSource, String displayName, 14500adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki String destination) { 14600adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki return (displayNameSource > DisplayNameSources.PHONE) ? displayName : destination; 14700adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki } 14800adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki 14900adb32f3cea49ec82467c0e1a9e42659b556836Makoto Onuki /** 15001382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * Construct a RecipientEntry from just an address that has been entered 15101382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * with both an associated display name. This address has not been resolved 15201382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira * to a contact and therefore does not have a contact id or photo. 15301382d764d2cbfbb4d2c1b554fe5c1ce1575dd26Mindy Pereira */ 154ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp public static RecipientEntry constructGeneratedEntry(String display, String address, 155ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp boolean isValid) { 156ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp return new RecipientEntry(ENTRY_TYPE_PERSON, display, address, INVALID_DESTINATION_TYPE, 1577a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy null, GENERATED_CONTACT, null /* directoryId */, GENERATED_CONTACT, null, true, 1587a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy isValid, null /* lookupKey */); 159f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira } 160f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira 161ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp public static RecipientEntry constructTopLevelEntry(String displayName, int displayNameSource, 162ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp String destination, int destinationType, String destinationLabel, long contactId, 1637a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy Long directoryId, long dataId, Uri photoThumbnailUri, boolean isValid, 1647a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy String lookupKey) { 165ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, 166ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp displayName, destination), destination, destinationType, destinationLabel, 1677a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy contactId, directoryId, dataId, photoThumbnailUri, true, isValid, lookupKey); 16874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa } 16974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 170ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp public static RecipientEntry constructTopLevelEntry(String displayName, int displayNameSource, 171ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp String destination, int destinationType, String destinationLabel, long contactId, 1727a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy Long directoryId, long dataId, String thumbnailUriAsString, boolean isValid, 1737a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy String lookupKey) { 174ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, 175ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp displayName, destination), destination, destinationType, destinationLabel, 1767a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy contactId, directoryId, dataId, (thumbnailUriAsString != null 1778af0d3b6f34e03c08c8e67be2190da01c59889daAndrew Sapperstein ? Uri.parse(thumbnailUriAsString) : null), true, isValid, lookupKey); 1786ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 1796ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 180ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp public static RecipientEntry constructSecondLevelEntry(String displayName, 181ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp int displayNameSource, String destination, int destinationType, 1827a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy String destinationLabel, long contactId, Long directoryId, long dataId, 1837a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy String thumbnailUriAsString, boolean isValid, String lookupKey) { 184ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, 185ccb8e237ec80934d1c983bb61f66b75541786ddcmindyp displayName, destination), destination, destinationType, destinationLabel, 1867a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy contactId, directoryId, dataId, (thumbnailUriAsString != null 1878af0d3b6f34e03c08c8e67be2190da01c59889daAndrew Sapperstein ? Uri.parse(thumbnailUriAsString) : null), false, isValid, lookupKey); 18874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa } 18974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 19074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa public int getEntryType() { 19174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa return mEntryType; 1926ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 1936ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 1946ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa public String getDisplayName() { 1956ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mDisplayName; 1966ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 1976ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 1986ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa public String getDestination() { 1996ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mDestination; 2006ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 2016ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 2027211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa public int getDestinationType() { 2037211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa return mDestinationType; 2047211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa } 2057211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa 2067211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa public String getDestinationLabel() { 2077211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa return mDestinationLabel; 2087211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa } 2097211747e51623ae1305053f533c09dd335e013a2Daisuke Miyakawa 210f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa public long getContactId() { 2116ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mContactId; 2126ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 2136ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 2147a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy public Long getDirectoryId() { 2157a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy return mDirectoryId; 2167a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy } 2177a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy 218f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa public long getDataId() { 2197537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa return mDataId; 2207537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa } 2217537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa 2226ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa public boolean isFirstLevel() { 2236ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mIsFirstLevel; 2246ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 2256ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 22674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa public Uri getPhotoThumbnailUri() { 22774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa return mPhotoThumbnailUri; 22874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa } 22974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 23074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa /** This can be called outside main Looper thread. */ 23174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa public synchronized void setPhotoBytes(byte[] photoBytes) { 23274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa mPhotoBytes = photoBytes; 23374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa } 23474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa 23574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa /** This can be called outside main Looper thread. */ 23674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa public synchronized byte[] getPhotoBytes() { 2376ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mPhotoBytes; 2386ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 2396ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa 2406ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa public boolean isSeparator() { 2416ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa return mIsDivider; 2426ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa } 2436d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa 2446d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa public boolean isSelectable() { 2456d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa return mEntryType == ENTRY_TYPE_PERSON; 2466d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa } 2479796a50bc03bcf488417dbc5a52e01bd75e3ff0eScott Kennedy 2487a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy public String getLookupKey() { 2497a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy return mLookupKey; 250514f8a75f72fa2e735418ffb5d6e30aa914fbe7bScott Kennedy } 251514f8a75f72fa2e735418ffb5d6e30aa914fbe7bScott Kennedy 2529796a50bc03bcf488417dbc5a52e01bd75e3ff0eScott Kennedy @Override 2539796a50bc03bcf488417dbc5a52e01bd75e3ff0eScott Kennedy public String toString() { 2549796a50bc03bcf488417dbc5a52e01bd75e3ff0eScott Kennedy return mDisplayName + " <" + mDestination + ">, isValid=" + mIsValid; 2559796a50bc03bcf488417dbc5a52e01bd75e3ff0eScott Kennedy } 256cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang 257cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang /** 258cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang * Returns if entry represents the same person as this instance. The default implementation 259cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang * checks whether the contact ids are the same, and subclasses may opt to override this. 260cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang */ 261cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang public boolean isSamePerson(final RecipientEntry entry) { 262cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang return entry != null && mContactId == entry.mContactId; 263cd980d9f73bfa02155f7bb092ae1fb212ed6e8e2Kaikai Wang } 2646ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa}