RecipientEntry.java revision e8adc2935e128eec6cae87ebfb3959b5bc6ec219
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;
2024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
2141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa/**
2241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa * Represents one entry inside recipient auto-complete list.
2341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa */
24f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereirapublic class RecipientEntry {
2524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
2624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final int ENTRY_TYPE_PERSON = 0;
2724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final int ENTRY_TYPE_SEP_NORMAL = 1;
2824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final int ENTRY_TYPE_SEP_WITHIN_GROUP = 2;
29a601adc796fa7276771e6ab2670bf50663555489Daisuke Miyakawa    public static final int ENTRY_TYPE_WAITING_FOR_DIRECTORY_SEARCH = 3;
3024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
31a601adc796fa7276771e6ab2670bf50663555489Daisuke Miyakawa    public static final int ENTRY_TYPE_SIZE = 4;
3224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
3341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Separator entry dividing two persons or groups. */
34f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static final RecipientEntry SEP_NORMAL =
35f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira            new RecipientEntry(ENTRY_TYPE_SEP_NORMAL);
3641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Separator entry dividing two entries inside a person or a group. */
37f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static final RecipientEntry SEP_WITHIN_GROUP =
38f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira            new RecipientEntry(ENTRY_TYPE_SEP_WITHIN_GROUP);
39a601adc796fa7276771e6ab2670bf50663555489Daisuke Miyakawa    public static final RecipientEntry WAITING_FOR_DIRECTORY_SEARCH =
40a601adc796fa7276771e6ab2670bf50663555489Daisuke Miyakawa            new RecipientEntry(ENTRY_TYPE_WAITING_FOR_DIRECTORY_SEARCH);
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;
5041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Destination for this contact entry. Would be an email address or a phone number. */
5141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final String mDestination;
52b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    /** ID for the person */
5365b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    private final long mContactId;
54b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    /** ID for the destination */
5565b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    private final long mDataId;
5641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final boolean mIsDivider;
5724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
5824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private final Uri mPhotoThumbnailUri;
5924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
6024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /**
6124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * This can be updated after this object being constructed, when the photo is fetched
6224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * from remote directories.
6324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     */
6441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private byte[] mPhotoBytes;
6541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
66f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    private RecipientEntry(int entryType) {
6724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
6841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = null;
6941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = null;
7041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = -1;
71b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        mDataId = -1;
7224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = null;
7341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mPhotoBytes = null;
7441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = true;
7541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
7641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
77f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    private RecipientEntry(
7865b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa            int entryType, String displayName, String destination, long contactId, long dataId,
7990081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira            Uri photoThumbnailUri, boolean isFirstLevel) {
8024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
8190081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira        mIsFirstLevel = isFirstLevel;
8241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = displayName;
8341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = destination;
8441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = contactId;
85b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        mDataId = dataId;
8624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = photoThumbnailUri;
8724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = null;
8841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = false;
8941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
9041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
91f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    /**
92f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * Construct a RecipientEntry from just an address that has been entered.
93f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * This address has not been resolved to a contact and therefore does not
94f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     * have a contact id or photo.
95f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira     */
96f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static RecipientEntry constructFakeEntry(String address) {
9790081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira        return new RecipientEntry(ENTRY_TYPE_PERSON, address, address, -1, -1, null, true);
98f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    }
99f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira
100f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static RecipientEntry constructTopLevelEntry(
10165b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa            String displayName, String destination, long contactId, long dataId,
102b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa            Uri photoThumbnailUri) {
10390081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira        return new RecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
10490081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira                photoThumbnailUri, true);
10524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
10624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
107f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static RecipientEntry constructTopLevelEntry(
10865b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa            String displayName, String destination, long contactId, long dataId,
109b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa            String thumbnailUriAsString) {
110f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira        return new RecipientEntry(
111b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa                ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
11290081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira                (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), true);
11341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
11441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
115f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira    public static RecipientEntry constructSecondLevelEntry(
11690081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira            String displayName, String destination, long contactId, long dataId,
11790081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira            String thumbnailUriAsString) {
118b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        return new RecipientEntry(
11990081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira                ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
12090081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira                (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), false);
12124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
12224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
12324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public int getEntryType() {
12424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mEntryType;
12541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
12641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
12741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDisplayName() {
12841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDisplayName;
12941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
13041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
13141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDestination() {
13241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDestination;
13341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
13441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
13565b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    public long getContactId() {
13641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mContactId;
13741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
13841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
13965b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa    public long getDataId() {
140b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa        return mDataId;
141b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa    }
142b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa
14341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isFirstLevel() {
14441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsFirstLevel;
14541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
14641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
14724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public Uri getPhotoThumbnailUri() {
14824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mPhotoThumbnailUri;
14924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
15024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
15124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
15224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized void setPhotoBytes(byte[] photoBytes) {
15324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = photoBytes;
15424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
15524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
15624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
15724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized byte[] getPhotoBytes() {
15841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mPhotoBytes;
15941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
16041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
16141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isSeparator() {
16241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsDivider;
16341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
164e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa
165e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa    public boolean isSelectable() {
166e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa        return mEntryType == ENTRY_TYPE_PERSON;
167e8adc2935e128eec6cae87ebfb3959b5bc6ec219Daisuke Miyakawa    }
16841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}