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;
22403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedyimport android.text.util.Rfc822Token;
23403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedyimport android.text.util.Rfc822Tokenizer;
2424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
2541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa/**
2641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Represents one entry inside recipient auto-complete list.
2741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa */
28f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereirapublic class RecipientEntry {
298c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /* package */ static final int INVALID_CONTACT = -1;
301174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    /**
311174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * A GENERATED_CONTACT is one that was created based entirely on
321174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * information passed in to the RecipientEntry from an external source
331174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * that is not a real contact.
341174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     */
358c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /* package */ static final int GENERATED_CONTACT = -2;
368c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa
378c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /** Used when {@link #mDestinationType} is invalid and thus shouldn't be used for display. */
388c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /* package */ static final int INVALID_DESTINATION_TYPE = -1;
3924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
4024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final int ENTRY_TYPE_PERSON = 0;
4124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
421e9e640680692868c1323422f248261c4ff4d259Mindy Pereira    public static final int ENTRY_TYPE_SIZE = 1;
4324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
4424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private final int mEntryType;
4541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
4641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /**
4741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     * True when this entry is the first entry in a group, which should have a photo and display
4841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     * name, while the second or later entries won't.
4941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     */
5041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private boolean mIsFirstLevel;
5141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final String mDisplayName;
528f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki
5341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Destination for this contact entry. Would be an email address or a phone number. */
5441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final String mDestination;
558c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /** Type of the destination like {@link Email#TYPE_HOME} */
568c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    private final int mDestinationType;
578c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    /**
588c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa     * Label of the destination which will be used when type was {@link Email#TYPE_CUSTOM}.
598c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa     * Can be null when {@link #mDestinationType} is {@link #INVALID_DESTINATION_TYPE}.
608c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa     */
618c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    private final String mDestinationLabel;
62b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    /** ID for the person */
6365b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    private final long mContactId;
64b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    /** ID for the destination */
6565b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    private final long mDataId;
6641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final boolean mIsDivider;
6724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
6824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private final Uri mPhotoThumbnailUri;
6924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
70fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    private boolean mIsValid;
7124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /**
7224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * This can be updated after this object being constructed, when the photo is fetched
7324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * from remote directories.
7424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     */
7541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private byte[] mPhotoBytes;
7641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
773e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy    private final boolean mIsGalContact;
783e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy
79fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    private RecipientEntry(int entryType, String displayName, String destination,
80fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            int destinationType, String destinationLabel, long contactId, long dataId,
813e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy            Uri photoThumbnailUri, boolean isFirstLevel, boolean isValid, boolean isGalContact) {
8224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
8390081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira        mIsFirstLevel = isFirstLevel;
8441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = displayName;
8541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = destination;
868c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa        mDestinationType = destinationType;
878c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa        mDestinationLabel = destinationLabel;
8841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = contactId;
89b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        mDataId = dataId;
9024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = photoThumbnailUri;
9124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = null;
9241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = false;
93fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        mIsValid = isValid;
943e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy        mIsGalContact = isGalContact;
95fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    }
96fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp
97fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    public boolean isValid() {
98fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        return mIsValid;
9941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
10041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
101f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    /**
1021174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * Determine if this was a RecipientEntry created from recipient info or
1031174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * an entry from contacts.
1041174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     */
1051174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    public static boolean isCreatedRecipient(long id) {
1061174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira        return id == RecipientEntry.INVALID_CONTACT || id == RecipientEntry.GENERATED_CONTACT;
1071174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    }
1081174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira
1091174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    /**
110f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * Construct a RecipientEntry from just an address that has been entered.
111f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * This address has not been resolved to a contact and therefore does not
112f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * have a contact id or photo.
113f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     */
114403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedy    public static RecipientEntry constructFakeEntry(final String address, final boolean isValid) {
115403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedy        final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(address);
1160ee09dfc02251a6932c3787400ce6e188e72ca23Tom Taylor        final String tokenizedAddress = tokens.length > 0 ? tokens[0].getAddress() : address;
117403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedy
118403e0d211ded97679e8c983481f9972f0a4b22c0Scott Kennedy        return new RecipientEntry(ENTRY_TYPE_PERSON, tokenizedAddress, tokenizedAddress,
1198c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa                INVALID_DESTINATION_TYPE, null,
1203e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                INVALID_CONTACT, INVALID_CONTACT, null, true, isValid, false /* isGalContact */);
1211174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    }
1221174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira
1231174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira    /**
1246413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor     * Construct a RecipientEntry from just a phone number.
1256413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor     */
1266413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor    public static RecipientEntry constructFakePhoneEntry(final String phoneNumber,
1276413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor            final boolean isValid) {
1286413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor        return new RecipientEntry(ENTRY_TYPE_PERSON, phoneNumber, phoneNumber,
1296413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor                INVALID_DESTINATION_TYPE, null,
1303e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                INVALID_CONTACT, INVALID_CONTACT, null, true, isValid, false /* isGalContact */);
1316413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor    }
1326413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor
1336413ac6689b3d33cf2e42715575d3119d2c90f00Tom Taylor    /**
1348f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki     * @return the display name for the entry.  If the display name source is larger than
1358f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki     * {@link DisplayNameSources#PHONE} we use the contact's display name, but if not,
1368f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki     * i.e. the display name came from an email address or a phone number, we don't use it
1378f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki     * to avoid confusion and just use the destination instead.
1388f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki     */
1398f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki    private static String pickDisplayName(int displayNameSource, String displayName,
1408f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki            String destination) {
1418f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki        return (displayNameSource > DisplayNameSources.PHONE) ? displayName : destination;
1428f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki    }
1438f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki
1448f968fc75a99645b5b170c3ca0bd3aca9a207ca7Makoto Onuki    /**
1451174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * Construct a RecipientEntry from just an address that has been entered
1461174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * with both an associated display name. This address has not been resolved
1471174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     * to a contact and therefore does not have a contact id or photo.
1481174eca98d1dbd263a9e72c5a9e35a1039aae979Mindy Pereira     */
149fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    public static RecipientEntry constructGeneratedEntry(String display, String address,
150fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            boolean isValid) {
151fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        return new RecipientEntry(ENTRY_TYPE_PERSON, display, address, INVALID_DESTINATION_TYPE,
1523e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                null, GENERATED_CONTACT, GENERATED_CONTACT, null, true, isValid,
1533e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                false /* isGalContact */);
154f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    }
155f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira
156fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    public static RecipientEntry constructTopLevelEntry(String displayName, int displayNameSource,
157fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            String destination, int destinationType, String destinationLabel, long contactId,
1583e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy            long dataId, Uri photoThumbnailUri, boolean isValid, boolean isGalContact) {
159fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource,
160fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp                displayName, destination), destination, destinationType, destinationLabel,
1613e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                contactId, dataId, photoThumbnailUri, true, isValid, isGalContact);
16224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
16324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
164fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    public static RecipientEntry constructTopLevelEntry(String displayName, int displayNameSource,
165fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            String destination, int destinationType, String destinationLabel, long contactId,
1663e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy            long dataId, String thumbnailUriAsString, boolean isValid, boolean isGalContact) {
167fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource,
168fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp                displayName, destination), destination, destinationType, destinationLabel,
169fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp                contactId, dataId, (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString)
1703e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                        : null), true, isValid, isGalContact);
17141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
17241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
173fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp    public static RecipientEntry constructSecondLevelEntry(String displayName,
174fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            int displayNameSource, String destination, int destinationType,
175fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp            String destinationLabel, long contactId, long dataId, String thumbnailUriAsString,
1763e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy            boolean isValid, boolean isGalContact) {
177fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp        return new RecipientEntry(ENTRY_TYPE_PERSON, pickDisplayName(displayNameSource,
178fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp                displayName, destination), destination, destinationType, destinationLabel,
179fbe2d2113c0d00e7f7c7197a3727bb0728d220d8mindyp                contactId, dataId, (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString)
1803e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy                        : null), false, isValid, isGalContact);
18124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
18224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
18324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public int getEntryType() {
18424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mEntryType;
18541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
18641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
18741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDisplayName() {
18841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDisplayName;
18941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
19041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
19141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDestination() {
19241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDestination;
19341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
19441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
1958c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    public int getDestinationType() {
1968c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa        return mDestinationType;
1978c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    }
1988c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa
1998c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    public String getDestinationLabel() {
2008c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa        return mDestinationLabel;
2018c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa    }
2028c03d35fec744db28a2a3230795f123c7afd50ccDaisuke Miyakawa
20365b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    public long getContactId() {
20441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mContactId;
20541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
20641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
20765b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    public long getDataId() {
208b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        return mDataId;
209b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    }
210b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa
21141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isFirstLevel() {
21241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsFirstLevel;
21341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
21441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
21524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public Uri getPhotoThumbnailUri() {
21624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mPhotoThumbnailUri;
21724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
21824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
21924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
22024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized void setPhotoBytes(byte[] photoBytes) {
22124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = photoBytes;
22224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
22324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
22424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
22524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized byte[] getPhotoBytes() {
22641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mPhotoBytes;
22741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
22841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
22941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isSeparator() {
23041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsDivider;
23141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
232e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa
233e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa    public boolean isSelectable() {
234e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa        return mEntryType == ENTRY_TYPE_PERSON;
235e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa    }
2367b1c6d7dea5f4e3fcb3eb4f137b2e510b394ea79Scott Kennedy
2373e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy    public boolean isGalContact() {
2383e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy        return mIsGalContact;
2393e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy    }
2403e8176df16950c067bcb1b37e62b2fc07d74065aScott Kennedy
2417b1c6d7dea5f4e3fcb3eb4f137b2e510b394ea79Scott Kennedy    @Override
2427b1c6d7dea5f4e3fcb3eb4f137b2e510b394ea79Scott Kennedy    public String toString() {
2437b1c6d7dea5f4e3fcb3eb4f137b2e510b394ea79Scott Kennedy        return mDisplayName + " <" + mDestination + ">, isValid=" + mIsValid;
2447b1c6d7dea5f4e3fcb3eb4f137b2e510b394ea79Scott Kennedy    }
24541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}