RecipientEntry.java revision 24a05a268d1fa2839d62361dc50b88a4c2a2975b
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 */
2441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawapublic class RecipientListEntry {
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;
2924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
3024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final int ENTRY_TYPE_SIZE = 3;
3124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
3241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Separator entry dividing two persons or groups. */
3324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final RecipientListEntry SEP_NORMAL =
3424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            new RecipientListEntry(ENTRY_TYPE_SEP_NORMAL);
3541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Separator entry dividing two entries inside a person or a group. */
3624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static final RecipientListEntry SEP_WITHIN_GROUP =
3724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            new RecipientListEntry(ENTRY_TYPE_SEP_WITHIN_GROUP);
3824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
3924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private final int mEntryType;
4041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
4141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /**
4241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     * True when this entry is the first entry in a group, which should have a photo and display
4341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     * name, while the second or later entries won't.
4441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa     */
4541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private boolean mIsFirstLevel;
4641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final String mDisplayName;
4741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    /** Destination for this contact entry. Would be an email address or a phone number. */
4841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final String mDestination;
4941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final int mContactId;
5041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private final boolean mIsDivider;
5124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
5224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private final Uri mPhotoThumbnailUri;
5324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
5424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /**
5524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * This can be updated after this object being constructed, when the photo is fetched
5624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     * from remote directories.
5724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa     */
5841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private byte[] mPhotoBytes;
5941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
6024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private RecipientListEntry(int entryType) {
6124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
6241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = null;
6341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = null;
6441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = -1;
6524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = null;
6641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mPhotoBytes = null;
6741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = true;
6841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
6941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
7024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    private RecipientListEntry(
7124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            int entryType, String displayName, String destination, int contactId) {
7224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
7341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsFirstLevel = false;
7441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = displayName;
7541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = destination;
7641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = contactId;
7724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = null;
7824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = null;
7941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = false;
8041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
8141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
8241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    private RecipientListEntry(
8324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            int entryType, String displayName, String destination, int contactId,
8424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            Uri photoThumbnailUri) {
8524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mEntryType = entryType;
8641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsFirstLevel = true;
8741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDisplayName = displayName;
8841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mDestination = destination;
8941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mContactId = contactId;
9024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoThumbnailUri = photoThumbnailUri;
9124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = null;
9241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        mIsDivider = false;
9341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
9441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
9541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public static RecipientListEntry constructTopLevelEntry(
9624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            String displayName, String destination, int contactId, Uri photoThumbnailUri) {
9724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return new RecipientListEntry(
9824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa                ENTRY_TYPE_PERSON, displayName, destination, contactId, photoThumbnailUri);
9924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
10024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
10124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public static RecipientListEntry constructTopLevelEntry(
10224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa            String displayName, String destination, int contactId, String thumbnailUriAsString) {
10324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return new RecipientListEntry(
10424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa                ENTRY_TYPE_PERSON, displayName, destination, contactId,
10524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa                (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null));
10641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
10741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
10841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public static RecipientListEntry constructSecondLevelEntry(
10941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa            String displayName, String destination, int contactId) {
11024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return new RecipientListEntry(ENTRY_TYPE_PERSON, displayName, destination, contactId);
11124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
11224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
11324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public int getEntryType() {
11424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mEntryType;
11541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
11641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
11741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDisplayName() {
11841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDisplayName;
11941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
12041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
12141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public String getDestination() {
12241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mDestination;
12341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
12441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
12541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public int getContactId() {
12641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mContactId;
12741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
12841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
12941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isFirstLevel() {
13041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsFirstLevel;
13141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
13241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
13324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public Uri getPhotoThumbnailUri() {
13424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        return mPhotoThumbnailUri;
13524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
13624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
13724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
13824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized void setPhotoBytes(byte[] photoBytes) {
13924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa        mPhotoBytes = photoBytes;
14024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    }
14124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa
14224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    /** This can be called outside main Looper thread. */
14324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa    public synchronized byte[] getPhotoBytes() {
14441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mPhotoBytes;
14541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
14641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa
14741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    public boolean isSeparator() {
14841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa        return mIsDivider;
14941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa    }
15041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}