RecipientEntry.java revision 90081ee88c7eb216ea22f426aa6856e310a867e1
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; 2924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 3024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public static final int ENTRY_TYPE_SIZE = 3; 3124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 3241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa /** Separator entry dividing two persons or groups. */ 33f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static final RecipientEntry SEP_NORMAL = 34f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira new RecipientEntry(ENTRY_TYPE_SEP_NORMAL); 3541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa /** Separator entry dividing two entries inside a person or a group. */ 36f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static final RecipientEntry SEP_WITHIN_GROUP = 37f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira new RecipientEntry(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; 49b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa /** ID for the person */ 5065b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa private final long mContactId; 51b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa /** ID for the destination */ 5265b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa private final long mDataId; 5341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private final boolean mIsDivider; 5424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 5524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa private final Uri mPhotoThumbnailUri; 5624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 5724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** 5824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa * This can be updated after this object being constructed, when the photo is fetched 5924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa * from remote directories. 6024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa */ 6141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa private byte[] mPhotoBytes; 6241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 63f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry(int entryType) { 6424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mEntryType = entryType; 6541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDisplayName = null; 6641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDestination = null; 6741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mContactId = -1; 68b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa mDataId = -1; 6924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoThumbnailUri = null; 7041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mPhotoBytes = null; 7141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mIsDivider = true; 7241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 7341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 74f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry( 7565b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa int entryType, String displayName, String destination, long contactId, long dataId, 7690081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira Uri photoThumbnailUri, boolean isFirstLevel) { 7724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mEntryType = entryType; 7890081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira mIsFirstLevel = isFirstLevel; 7941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDisplayName = displayName; 8041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mDestination = destination; 8141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mContactId = contactId; 82b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa mDataId = dataId; 8324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoThumbnailUri = photoThumbnailUri; 8424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoBytes = null; 8541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa mIsDivider = false; 8641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 8741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 88f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira /** 89f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * Construct a RecipientEntry from just an address that has been entered. 90f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * This address has not been resolved to a contact and therefore does not 91f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * have a contact id or photo. 92f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira */ 93f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructFakeEntry(String address) { 9490081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira return new RecipientEntry(ENTRY_TYPE_PERSON, address, address, -1, -1, null, true); 95f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira } 96f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira 97f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 9865b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa String displayName, String destination, long contactId, long dataId, 99b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa Uri photoThumbnailUri) { 10090081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira return new RecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId, 10190081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira photoThumbnailUri, true); 10224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 10324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 104f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 10565b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa String displayName, String destination, long contactId, long dataId, 106b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa String thumbnailUriAsString) { 107f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry( 108b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId, 10990081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), true); 11041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 11141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 112f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructSecondLevelEntry( 11390081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira String displayName, String destination, long contactId, long dataId, 11490081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira String thumbnailUriAsString) { 115b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa return new RecipientEntry( 11690081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira ENTRY_TYPE_PERSON, displayName, destination, contactId, dataId, 11790081ee88c7eb216ea22f426aa6856e310a867e1Mindy Pereira (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null), false); 11824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 11924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 12024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public int getEntryType() { 12124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa return mEntryType; 12241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 12341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 12441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public String getDisplayName() { 12541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mDisplayName; 12641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 12741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 12841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public String getDestination() { 12941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mDestination; 13041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 13141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 13265b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa public long getContactId() { 13341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mContactId; 13441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 13541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 13665b8c0327b00beda9309c7b7c116013d03b06d90Daisuke Miyakawa public long getDataId() { 137b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa return mDataId; 138b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa } 139b5ebb8916a1bb178062a0ccb59e80de27ec1bb2dDaisuke Miyakawa 14041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isFirstLevel() { 14141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsFirstLevel; 14241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 14341caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 14424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public Uri getPhotoThumbnailUri() { 14524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa return mPhotoThumbnailUri; 14624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 14724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 14824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 14924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized void setPhotoBytes(byte[] photoBytes) { 15024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoBytes = photoBytes; 15124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 15224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 15324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 15424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized byte[] getPhotoBytes() { 15541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mPhotoBytes; 15641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 15741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 15841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isSeparator() { 15941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsDivider; 16041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 16141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}