DropdownChipLayouter.java revision 7a4e67708498ec46c2e9b3bad69d3807d88c064e
1b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linpackage com.android.ex.chips; 2b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 3b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.content.Context; 4b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.graphics.Bitmap; 5b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.graphics.BitmapFactory; 6b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.net.Uri; 7b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.text.TextUtils; 8b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.text.util.Rfc822Tokenizer; 9b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.view.LayoutInflater; 10b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.view.View; 11b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.view.ViewGroup; 12b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.widget.ImageView; 13b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport android.widget.TextView; 14b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 15b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linimport com.android.ex.chips.Queries.Query; 16b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 17b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin/** 18b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * A class that inflates and binds the views in the dropdown list from 19b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * RecipientEditTextView. 20b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 21b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Linpublic class DropdownChipLayouter { 22b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 23b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * The type of adapter that is requesting a chip layout. 24b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 25b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public enum AdapterType { 26b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin BASE_RECIPIENT, 27b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin RECIPIENT_ALTERNATES, 28b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin SINGLE_RECIPIENT 29b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 30b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 31b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin private final LayoutInflater mInflater; 32b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin private final Context mContext; 33b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin private Query mQuery; 34b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 35b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public DropdownChipLayouter(LayoutInflater inflater, Context context) { 36b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin mInflater = inflater; 37b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin mContext = context; 38b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 39b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 40b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public void setQuery(Query query) { 41b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin mQuery = query; 42b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 43b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 44b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 45b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 46b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Layouts and binds recipient information to the view. If convertView is null, inflates a new 47b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * view with getItemLaytout(). 48b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * 49b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param convertView The view to bind information to. 50b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param parent The parent to bind the view to if we inflate a new view. 51b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param entry The recipient entry to get information from. 52b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param position The position in the list. 53b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param type The adapter type that is requesting the bind. 54b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @param constraint The constraint typed in the auto complete view. 55b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * 56b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * @return A view ready to be shown in the drop down list. 57b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 58b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public View bindView(View convertView, ViewGroup parent, RecipientEntry entry, int position, 59b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin AdapterType type, String constraint) { 60b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // Default to show all the information 61b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin String displayName = entry.getDisplayName(); 62b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin String destination = entry.getDestination(); 63b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin boolean showImage = true; 64b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin CharSequence destinationType = getDestinationType(entry); 65b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 66b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin final View itemView = reuseOrInflateView(convertView, parent, type); 67b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 68b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin final ViewHolder viewHolder = new ViewHolder(itemView); 69b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 70b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // Hide some information depending on the entry type and adapter type 71b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin switch (type) { 72b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case BASE_RECIPIENT: 73b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (TextUtils.isEmpty(displayName) || TextUtils.equals(displayName, destination)) { 74b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin displayName = destination; 75b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 76b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // We only show the destination for secondary entries, so clear it only for the 77b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // first level. 78b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (entry.isFirstLevel()) { 79b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin destination = null; 80b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 81b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 82b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 83b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (!entry.isFirstLevel()) { 84b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin displayName = null; 85b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin showImage = false; 86b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 87b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 88b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case RECIPIENT_ALTERNATES: 89b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (position != 0) { 90b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin displayName = null; 91b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin showImage = false; 92b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 93b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 94b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case SINGLE_RECIPIENT: 95b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin destination = Rfc822Tokenizer.tokenize(entry.getDestination())[0].getAddress(); 96b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin destinationType = null; 97b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 98b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 99b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // Bind the information to the view 100b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin bindTextToView(displayName, viewHolder.displayNameView); 101b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin bindTextToView(destination, viewHolder.destinationView); 102b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin bindTextToView(destinationType, viewHolder.destinationTypeView); 103b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin bindIconToView(showImage, entry, viewHolder.imageView, type); 104b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 105b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return itemView; 106b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 107b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 108b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 109b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns a new view with {@link #getItemLayoutResId()}. 110b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 111b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public View newView() { 112b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return mInflater.inflate(getItemLayoutResId(), null); 113b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 114b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 115b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 116b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns the same view, or inflates a new one if the given view was null. 117b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 118b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected View reuseOrInflateView(View convertView, ViewGroup parent, AdapterType type) { 119b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin int itemLayout = getItemLayoutResId(); 120b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin switch (type) { 121b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case BASE_RECIPIENT: 122b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case RECIPIENT_ALTERNATES: 123b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 124b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case SINGLE_RECIPIENT: 125b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin itemLayout = getAlternateItemLayoutResId(); 126b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 127b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 128b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return convertView != null ? convertView : mInflater.inflate(itemLayout, parent, false); 129b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 130b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 131b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 132b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Binds the text to the given text view. If the text was null, hides the text view. 133b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 134b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected void bindTextToView(CharSequence text, TextView view) { 135b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (view == null) { 136b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return; 137b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 138b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 139b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (text != null) { 140b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setText(text); 141b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setVisibility(View.VISIBLE); 142b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } else { 143b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setVisibility(View.GONE); 144b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 145b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 146b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 147b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 148b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Binds the avatar icon to the image view. If we don't want to show the image, hides the 149b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * image view. 150b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 151b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected void bindIconToView(boolean showImage, RecipientEntry entry, ImageView view, 152b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin AdapterType type) { 153b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (view == null) { 154b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return; 155b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 156b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 157b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (showImage) { 158b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin switch (type) { 159b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case BASE_RECIPIENT: 160b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin byte[] photoBytes = entry.getPhotoBytes(); 161b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (photoBytes != null && photoBytes.length > 0) { 162b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin final Bitmap photo = BitmapFactory.decodeByteArray(photoBytes, 0, 163b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin photoBytes.length); 164b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setImageBitmap(photo); 165b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } else { 166b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setImageResource(getDefaultPhotoResId()); 167b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 168b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 169b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case RECIPIENT_ALTERNATES: 170b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin Uri thumbnailUri = entry.getPhotoThumbnailUri(); 171b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin if (thumbnailUri != null) { 172b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // TODO: see if this needs to be done outside the main thread 173b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin // as it may be too slow to get immediately. 1747a4e67708498ec46c2e9b3bad69d3807d88c064eScott Kennedy view.setImageURI(thumbnailUri); 175b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } else { 176b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setImageResource(getDefaultPhotoResId()); 177b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 178b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 179b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin case SINGLE_RECIPIENT: 180b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin default: 181b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin break; 182b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 183b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setVisibility(View.VISIBLE); 184b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } else { 185b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin view.setVisibility(View.GONE); 186b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 187b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 188b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 189b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected CharSequence getDestinationType(RecipientEntry entry) { 190b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return mQuery.getTypeLabel(mContext.getResources(), entry.getDestinationType(), 191b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin entry.getDestinationLabel()).toString().toUpperCase(); 192b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 193b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 194b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 195b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns a layout id for each item inside auto-complete list. 196b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * 197b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Each View must contain two TextViews (for display name and destination) and one ImageView 198b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * (for photo). Ids for those should be available via {@link #getDisplayNameResId()}, 199b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * {@link #getDestinationResId()}, and {@link #getPhotoResId()}. 200b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 201b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getItemLayoutResId() { 202b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return R.layout.chips_recipient_dropdown_item; 203b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 204b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 205b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 206b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns a layout id for each item inside alternate auto-complete list. 207b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * 208b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Each View must contain two TextViews (for display name and destination) and one ImageView 209b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * (for photo). Ids for those should be available via {@link #getDisplayNameResId()}, 210b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * {@link #getDestinationResId()}, and {@link #getPhotoResId()}. 211b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 212b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getAlternateItemLayoutResId() { 213b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return R.layout.chips_alternate_item; 214b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 215b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 216b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 217b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns a resource ID representing an image which should be shown when ther's no relevant 218b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * photo is available. 219b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 220b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getDefaultPhotoResId() { 221b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return R.drawable.ic_contact_picture; 222b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 223b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 224b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 225b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns an id for TextView in an item View for showing a display name. By default 226b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * {@link android.R.id#title} is returned. 227b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 228b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getDisplayNameResId() { 229b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return android.R.id.title; 230b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 231b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 232b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 233b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns an id for TextView in an item View for showing a destination 234b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * (an email address or a phone number). 235b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * By default {@link android.R.id#text1} is returned. 236b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 237b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getDestinationResId() { 238b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return android.R.id.text1; 239b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 240b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 241b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 242b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns an id for TextView in an item View for showing the type of the destination. 243b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * By default {@link android.R.id#text2} is returned. 244b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 245b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getDestinationTypeResId() { 246b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return android.R.id.text2; 247b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 248b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 249b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 250b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * Returns an id for ImageView in an item View for showing photo image for a person. In default 251b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * {@link android.R.id#icon} is returned. 252b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 253b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected int getPhotoResId() { 254b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin return android.R.id.icon; 255b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 256b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 257b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin /** 258b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * A holder class the view. Uses the getters in DropdownChipLayouter to find the id of the 259b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin * corresponding views. 260b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin */ 261b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin protected class ViewHolder { 262b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public final TextView displayNameView; 263b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public final TextView destinationView; 264b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public final TextView destinationTypeView; 265b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public final ImageView imageView; 266b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin 267b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin public ViewHolder(View view) { 268b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin displayNameView = (TextView) view.findViewById(getDisplayNameResId()); 269b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin destinationView = (TextView) view.findViewById(getDestinationResId()); 270b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin destinationTypeView = (TextView) view.findViewById(getDestinationTypeResId()); 271b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin imageView = (ImageView) view.findViewById(getPhotoResId()); 272b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 273b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin } 274b10d1c652d0416c284d9792fc9a0a92b3acd51caKevin Lin} 275