RecipientEntry.java revision 6d6bd68a492fbbfca50ae4793313083105e6f270
16ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa/*
26ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project
36ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa *
46ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
56ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * you may not use this file except in compliance with the License.
66ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * You may obtain a copy of the License at
76ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa *
86ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
96ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa *
106ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
116ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
126ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * See the License for the specific language governing permissions and
146ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * limitations under the License.
156ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa */
166ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
176ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawapackage com.android.ex.chips;
186ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
1974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawaimport android.net.Uri;
2074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
216ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa/**
226ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa * Represents one entry inside recipient auto-complete list.
236ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa */
24f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereirapublic class RecipientEntry {
2574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
2674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public static final int ENTRY_TYPE_PERSON = 0;
2774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public static final int ENTRY_TYPE_SEP_NORMAL = 1;
2874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public static final int ENTRY_TYPE_SEP_WITHIN_GROUP = 2;
294bb6a342f5aa1f38b0e0083d014e538e937eccceDaisuke Miyakawa    public static final int ENTRY_TYPE_WAITING_FOR_DIRECTORY_SEARCH = 3;
3074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
314bb6a342f5aa1f38b0e0083d014e538e937eccceDaisuke Miyakawa    public static final int ENTRY_TYPE_SIZE = 4;
3274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
336ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    /** Separator entry dividing two persons or groups. */
34f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static final RecipientEntry SEP_NORMAL =
35f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira            new RecipientEntry(ENTRY_TYPE_SEP_NORMAL);
366ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    /** Separator entry dividing two entries inside a person or a group. */
37f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static final RecipientEntry SEP_WITHIN_GROUP =
38f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira            new RecipientEntry(ENTRY_TYPE_SEP_WITHIN_GROUP);
394bb6a342f5aa1f38b0e0083d014e538e937eccceDaisuke Miyakawa    public static final RecipientEntry WAITING_FOR_DIRECTORY_SEARCH =
404bb6a342f5aa1f38b0e0083d014e538e937eccceDaisuke Miyakawa            new RecipientEntry(ENTRY_TYPE_WAITING_FOR_DIRECTORY_SEARCH);
4174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
4274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    private final int mEntryType;
436ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
446ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    /**
456ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa     * True when this entry is the first entry in a group, which should have a photo and display
466ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa     * name, while the second or later entries won't.
476ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa     */
486ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    private boolean mIsFirstLevel;
496ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    private final String mDisplayName;
506ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    /** Destination for this contact entry. Would be an email address or a phone number. */
516ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    private final String mDestination;
527537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa    /** ID for the person */
53f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa    private final long mContactId;
547537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa    /** ID for the destination */
55f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa    private final long mDataId;
566ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    private final boolean mIsDivider;
5774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
5874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    private final Uri mPhotoThumbnailUri;
5974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
6074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    /**
6174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa     * This can be updated after this object being constructed, when the photo is fetched
6274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa     * from remote directories.
6374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa     */
646ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    private byte[] mPhotoBytes;
656ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
66f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    private RecipientEntry(int entryType) {
6774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mEntryType = entryType;
686ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mDisplayName = null;
696ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mDestination = null;
706ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mContactId = -1;
717537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa        mDataId = -1;
7274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mPhotoThumbnailUri = null;
736ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mPhotoBytes = null;
746ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mIsDivider = true;
756ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
766ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
77f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    private RecipientEntry(
78f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa            int entryType, String displayName, String destination, long contactId, long dataId,
796b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira            Uri photoThumbnailUri, boolean isFirstLevel) {
8074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mEntryType = entryType;
816b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira        mIsFirstLevel = isFirstLevel;
826ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mDisplayName = displayName;
836ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mDestination = destination;
846ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mContactId = contactId;
857537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa        mDataId = dataId;
8674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mPhotoThumbnailUri = photoThumbnailUri;
8774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mPhotoBytes = null;
886ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        mIsDivider = false;
896ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
906ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
91f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    /**
92f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira     * Construct a RecipientEntry from just an address that has been entered.
93f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira     * This address has not been resolved to a contact and therefore does not
94f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira     * have a contact id or photo.
95f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira     */
96f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static RecipientEntry constructFakeEntry(String address) {
976b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira        return new RecipientEntry(ENTRY_TYPE_PERSON, address, address, -1, -1, null, true);
98f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    }
99f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira
100f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static RecipientEntry constructTopLevelEntry(
101f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa            String displayName, String destination, long contactId, long dataId,
1027537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa            Uri photoThumbnailUri) {
1036b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira        return new RecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
1046b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira                photoThumbnailUri, true);
10574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    }
10674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
107f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static RecipientEntry constructTopLevelEntry(
108f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa            String displayName, String destination, long contactId, long dataId,
1097537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa            String thumbnailUriAsString) {
110f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira        return new RecipientEntry(
1117537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa                ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
1126b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira                (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), true);
1136ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1146ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
115f621a601e1f966c89b7aadbcca384021e14d668dMindy Pereira    public static RecipientEntry constructSecondLevelEntry(
1166b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira            String displayName, String destination, long contactId, long dataId,
1176b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira            String thumbnailUriAsString) {
1187537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa        return new RecipientEntry(
1196b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira                ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId,
1206b6de6266d3bede33728cf995f1fd5c59ec5a55dMindy Pereira                (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), false);
12174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    }
12274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
12374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public int getEntryType() {
12474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        return mEntryType;
1256ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1266ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
1276ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    public String getDisplayName() {
1286ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mDisplayName;
1296ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1306ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
1316ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    public String getDestination() {
1326ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mDestination;
1336ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1346ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
135f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa    public long getContactId() {
1366ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mContactId;
1376ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1386ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
139f15b448bb9fd41ec7aea7cd95104ab3d82355a06Daisuke Miyakawa    public long getDataId() {
1407537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa        return mDataId;
1417537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa    }
1427537f840506bcb642bed9dc1c2bdcf6d31c6b2a7Daisuke Miyakawa
1436ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    public boolean isFirstLevel() {
1446ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mIsFirstLevel;
1456ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1466ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
14774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public Uri getPhotoThumbnailUri() {
14874a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        return mPhotoThumbnailUri;
14974a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    }
15074a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
15174a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    /** This can be called outside main Looper thread. */
15274a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public synchronized void setPhotoBytes(byte[] photoBytes) {
15374a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa        mPhotoBytes = photoBytes;
15474a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    }
15574a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa
15674a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    /** This can be called outside main Looper thread. */
15774a977cbc35413866ca039d509801fe0b02e1901Daisuke Miyakawa    public synchronized byte[] getPhotoBytes() {
1586ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mPhotoBytes;
1596ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1606ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa
1616ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    public boolean isSeparator() {
1626ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa        return mIsDivider;
1636ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa    }
1646d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa
1656d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa    public boolean isSelectable() {
1666d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa        return mEntryType == ENTRY_TYPE_PERSON;
1676d6bd68a492fbbfca50ae4793313083105e6f270Daisuke Miyakawa    }
1686ac7d0c6f6db2f5af06f9f2c73f24760d4df7b84Daisuke Miyakawa}