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}