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}