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}