RecipientEntry.java revision f566dee91901e44db63df3bf393afb1d43a36f78
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; 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 60f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry(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 70f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry( 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 82f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira private RecipientEntry( 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 95f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira /** 96f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * Construct a RecipientEntry from just an address that has been entered. 97f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * This address has not been resolved to a contact and therefore does not 98f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira * have a contact id or photo. 99f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira */ 100f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructFakeEntry(String address) { 101f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry( 102f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira ENTRY_TYPE_PERSON, address, address, -1, null); 103f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira } 104f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira 105f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 10624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa String displayName, String destination, int contactId, Uri photoThumbnailUri) { 107f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry( 10824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa ENTRY_TYPE_PERSON, displayName, destination, contactId, photoThumbnailUri); 10924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 11024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 111f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructTopLevelEntry( 11224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa String displayName, String destination, int contactId, String thumbnailUriAsString) { 113f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry( 11424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa ENTRY_TYPE_PERSON, displayName, destination, contactId, 11524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa (thumbnailUriAsString != null ? Uri.parse(thumbnailUriAsString) : null)); 11641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 11741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 118f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira public static RecipientEntry constructSecondLevelEntry( 11941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa String displayName, String destination, int contactId) { 120f566dee91901e44db63df3bf393afb1d43a36f78Mindy Pereira return new RecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, contactId); 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 13541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public int getContactId() { 13641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mContactId; 13741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 13841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 13941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isFirstLevel() { 14041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsFirstLevel; 14141caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 14241caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 14324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public Uri getPhotoThumbnailUri() { 14424a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa return mPhotoThumbnailUri; 14524a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 14624a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 14724a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 14824a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized void setPhotoBytes(byte[] photoBytes) { 14924a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa mPhotoBytes = photoBytes; 15024a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa } 15124a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa 15224a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa /** This can be called outside main Looper thread. */ 15324a05a268d1fa2839d62361dc50b88a4c2a2975bDaisuke Miyakawa public synchronized byte[] getPhotoBytes() { 15441caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mPhotoBytes; 15541caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 15641caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa 15741caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa public boolean isSeparator() { 15841caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa return mIsDivider; 15941caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa } 16041caab4c41a94712f8eeb1585422df52f8ab5db2Daisuke Miyakawa}