141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa/* 241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project 341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * 441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * you may not use this file except in compliance with the License. 641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * You may obtain a copy of the License at 741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * 841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * 1041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 1141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 1241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * See the License for the specific language governing permissions and 1441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * limitations under the License. 1541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa */ 1641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 1741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawapackage com.android.ex.chips; 1841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 1924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawaimport android.net.Uri; 208c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email; 218f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onukiimport android.provider.ContactsContract.DisplayNameSources; 2224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 2341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa/** 2441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Represents one entry inside recipient auto-complete list. 2541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa */ 26f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereirapublic class RecipientEntry { 278c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /* package */ static final int INVALID_CONTACT = -1; 281174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira /** 291174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * A GENERATED_CONTACT is one that was created based entirely on 301174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * information passed in to the RecipientEntry from an external source 311174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * that is not a real contact. 321174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira */ 338c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /* package */ static final int GENERATED_CONTACT = -2; 348c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa 358c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /** Used when {@link #mDestinationType} is invalid and thus shouldn't be used for display. */ 368c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /* package */ static final int INVALID_DESTINATION_TYPE = -1; 3724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 3824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public static final int ENTRY_TYPE_PERSON = 0; 3924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 401e9e640680692868c1323422f248261c4ff4d259Mindy Pereira public static final int ENTRY_TYPE_SIZE = 1; 4124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 4224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa private final int mEntryType; 4341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 4441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa /** 4541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * True when this entry is the first entry in a group, which should have a photo and display 4641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * name, while the second or later entries won't. 4741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa */ 4841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private boolean mIsFirstLevel; 4941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private final String mDisplayName; 508f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki 5141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa /** Destination for this contact entry. Would be an email address or a phone number. */ 5241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private final String mDestination; 538c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /** Type of the destination like {@link Email#TYPE_HOME} */ 548c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa private final int mDestinationType; 558c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa /** 568c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa * Label of the destination which will be used when type was {@link Email#TYPE_CUSTOM}. 578c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa * Can be null when {@link #mDestinationType} is {@link #INVALID_DESTINATION_TYPE}. 588c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa */ 598c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa private final String mDestinationLabel; 60b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa /** ID for the person */ 6165b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa private final long mContactId; 62b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa /** ID for the destination */ 6365b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa private final long mDataId; 6441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private final boolean mIsDivider; 6524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 6624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa private final Uri mPhotoThumbnailUri; 6724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 6824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** 6924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa * This can be updated after this object being constructed, when the photo is fetched 7024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa * from remote directories. 7124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa */ 7241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private byte[] mPhotoBytes; 7341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 74f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry(int entryType) { 7524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mEntryType = entryType; 7641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDisplayName = null; 7741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDestination = null; 788c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa mDestinationType = INVALID_DESTINATION_TYPE; 798c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa mDestinationLabel = null; 8041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mContactId = -1; 81b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa mDataId = -1; 8224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoThumbnailUri = null; 8341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mPhotoBytes = null; 8441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mIsDivider = true; 8541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 8641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 87f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry( 888c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa int entryType, String displayName, 898c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa String destination, int destinationType, String destinationLabel, 908c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa long contactId, long dataId, Uri photoThumbnailUri, boolean isFirstLevel) { 9124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mEntryType = entryType; 9290081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira mIsFirstLevel = isFirstLevel; 9341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDisplayName = displayName; 9441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDestination = destination; 958c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa mDestinationType = destinationType; 968c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa mDestinationLabel = destinationLabel; 9741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mContactId = contactId; 98b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa mDataId = dataId; 9924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoThumbnailUri = photoThumbnailUri; 10024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoBytes = null; 10141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mIsDivider = false; 10241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 10341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 104f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira /** 1051174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * Determine if this was a RecipientEntry created from recipient info or 1061174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * an entry from contacts. 1071174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira */ 1081174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira public static boolean isCreatedRecipient(long id) { 1091174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira return id == RecipientEntry.INVALID_CONTACT || id == RecipientEntry.GENERATED_CONTACT; 1101174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira } 1111174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira 1121174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira /** 113f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * Construct a RecipientEntry from just an address that has been entered. 114f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * This address has not been resolved to a contact and therefore does not 115f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * have a contact id or photo. 116f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira */ 117f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructFakeEntry(String address) { 1188c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa return new RecipientEntry(ENTRY_TYPE_PERSON, address, address, 1198c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa INVALID_DESTINATION_TYPE, null, 1208c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa INVALID_CONTACT, INVALID_CONTACT, null, true); 1211174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira } 1221174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira 1231174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira /** 1248f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki * @return the display name for the entry. If the display name source is larger than 1258f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki * {@link DisplayNameSources#PHONE} we use the contact's display name, but if not, 1268f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki * i.e. the display name came from an email address or a phone number, we don't use it 1278f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki * to avoid confusion and just use the destination instead. 1288f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki */ 1298f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki private static String pickDisplayName(int displayNameSource, String displayName, 1308f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String destination) { 1318f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki return (displayNameSource > DisplayNameSources.PHONE) ? displayName : destination; 1328f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki } 1338f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki 1348f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki /** 1351174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * Construct a RecipientEntry from just an address that has been entered 1361174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * with both an associated display name. This address has not been resolved 1371174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira * to a contact and therefore does not have a contact id or photo. 1381174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira */ 1391174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira public static RecipientEntry constructGeneratedEntry(String display, String address) { 1408c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa return new RecipientEntry(ENTRY_TYPE_PERSON, display, 1418c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa address, INVALID_DESTINATION_TYPE, null, 1428c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa GENERATED_CONTACT, GENERATED_CONTACT, null, true); 143f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira } 144f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira 145f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 1468f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String displayName, int displayNameSource, String destination, int destinationType, 1478f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String destinationLabel, long contactId, long dataId, Uri photoThumbnailUri) { 1488f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName, 1498f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki destination), 1508c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa destination, destinationType, destinationLabel, 1518c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa contactId, dataId, 15290081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira photoThumbnailUri, true); 15324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 15424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 155f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 1568f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String displayName, int displayNameSource, String destination, int destinationType, 1578f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String destinationLabel, long contactId, long dataId, 158b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa String thumbnailUriAsString) { 159f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry( 1608f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName, destination), 1618c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa destination, destinationType, destinationLabel, 1628c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa contactId, dataId, 16390081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), true); 16441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 16541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 166f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructSecondLevelEntry( 1678f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String displayName, int displayNameSource, String destination, int destinationType, 1688f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki String destinationLabel, long contactId, long dataId, String thumbnailUriAsString) { 169b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa return new RecipientEntry( 1708f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource, displayName, destination), 1718c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa destination, destinationType, destinationLabel, 1728c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa contactId, dataId, 17390081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), false); 17424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 17524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 17624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public int getEntryType() { 17724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa return mEntryType; 17841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 17941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 18041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public String getDisplayName() { 18141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mDisplayName; 18241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 18341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 18441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public String getDestination() { 18541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mDestination; 18641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 18741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 1888c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa public int getDestinationType() { 1898c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa return mDestinationType; 1908c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa } 1918c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa 1928c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa public String getDestinationLabel() { 1938c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa return mDestinationLabel; 1948c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa } 1958c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa 19665b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa public long getContactId() { 19741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mContactId; 19841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 19941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 20065b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa public long getDataId() { 201b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa return mDataId; 202b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa } 203b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa 20441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isFirstLevel() { 20541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsFirstLevel; 20641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 20741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 20824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public Uri getPhotoThumbnailUri() { 20924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa return mPhotoThumbnailUri; 21024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 21124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 21224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 21324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized void setPhotoBytes(byte[] photoBytes) { 21424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoBytes = photoBytes; 21524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 21624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 21724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 21824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized byte[] getPhotoBytes() { 21941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mPhotoBytes; 22041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 22141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 22241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isSeparator() { 22341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsDivider; 22441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 225e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa 226e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa public boolean isSelectable() { 227e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa return mEntryType == ENTRY_TYPE_PERSON; 228e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa } 22941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}