1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.contacts.editor; 18 19 import android.content.Context; 20 import android.net.Uri; 21 import android.provider.ContactsContract.Contacts; 22 import android.text.TextUtils; 23 import android.util.AttributeSet; 24 import android.view.View; 25 import android.widget.ImageView; 26 import android.widget.LinearLayout; 27 import android.widget.TextView; 28 29 import com.android.contacts.ContactPhotoManager; 30 import com.android.contacts.R; 31 import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion; 32 33 /** 34 * A view that contains a name, picture and other data for a contact aggregation suggestion. 35 */ 36 public class AggregationSuggestionView extends LinearLayout { 37 38 public interface Listener { 39 /** 40 * Callback that passes the contact URI and raw contact ID to edit instead of the 41 * current contact. 42 */ onEditAction(Uri contactLookupUri, long rawContactId)43 void onEditAction(Uri contactLookupUri, long rawContactId); 44 } 45 46 private Listener mListener; 47 private Suggestion mSuggestion; 48 AggregationSuggestionView(Context context)49 public AggregationSuggestionView(Context context) { 50 super(context); 51 } 52 AggregationSuggestionView(Context context, AttributeSet attrs)53 public AggregationSuggestionView(Context context, AttributeSet attrs) { 54 super(context, attrs); 55 } 56 AggregationSuggestionView(Context context, AttributeSet attrs, int defStyle)57 public AggregationSuggestionView(Context context, AttributeSet attrs, int defStyle) { 58 super(context, attrs, defStyle); 59 } 60 bindSuggestion(Suggestion suggestion)61 public void bindSuggestion(Suggestion suggestion) { 62 mSuggestion = suggestion; 63 final ContactPhotoManager.DefaultImageRequest 64 request = new ContactPhotoManager.DefaultImageRequest( 65 suggestion.name, String.valueOf(suggestion.rawContactId), /* isCircular = */ false); 66 final ImageView photoView = (ImageView) findViewById( 67 R.id.aggregation_suggestion_photo); 68 ContactPhotoManager.getInstance(getContext()).loadThumbnail(photoView, 69 suggestion.photoId, 70 /* darkTheme = */ false, 71 /* isCircular = */ false, 72 request); 73 74 final TextView name = (TextView) findViewById(R.id.aggregation_suggestion_name); 75 name.setText(suggestion.name); 76 77 final TextView data = (TextView) findViewById(R.id.aggregation_suggestion_data); 78 String dataText = null; 79 if (suggestion.nickname != null) { 80 dataText = suggestion.nickname; 81 } else if (suggestion.emailAddress != null) { 82 dataText = suggestion.emailAddress; 83 } else if (suggestion.phoneNumber != null) { 84 dataText = suggestion.phoneNumber; 85 // Phone numbers should always be in LTR mode. 86 data.setTextDirection(View.TEXT_DIRECTION_LTR); 87 } 88 data.setText(dataText); 89 } 90 setListener(Listener listener)91 public void setListener(Listener listener) { 92 mListener = listener; 93 } 94 handleItemClickEvent()95 public boolean handleItemClickEvent() { 96 if (mListener != null && isEnabled()) { 97 if (TextUtils.isEmpty(mSuggestion.contactLookupKey)) { 98 return false; 99 } 100 mListener.onEditAction( 101 Contacts.getLookupUri(mSuggestion.contactId, mSuggestion.contactLookupKey), 102 mSuggestion.rawContactId); 103 return true; 104 } 105 return false; 106 } 107 } 108