diff options
Diffstat (limited to 'java/com/android/dialer/speeddial/SuggestionViewHolder.java')
-rw-r--r-- | java/com/android/dialer/speeddial/SuggestionViewHolder.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/java/com/android/dialer/speeddial/SuggestionViewHolder.java b/java/com/android/dialer/speeddial/SuggestionViewHolder.java new file mode 100644 index 000000000..70df30706 --- /dev/null +++ b/java/com/android/dialer/speeddial/SuggestionViewHolder.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.speeddial; + +import android.content.Context; +import android.content.res.Resources; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.Contacts; +import android.support.v7.widget.RecyclerView; +import android.telephony.PhoneNumberUtils; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.QuickContactBadge; +import android.widget.TextView; +import com.android.dialer.contactphoto.ContactPhotoManager; +import com.android.dialer.lettertile.LetterTileDrawable; +import com.android.dialer.location.GeoUtil; + +/** ViewHolder for displaying suggested contacts in {@link SpeedDialFragment}. */ +public class SuggestionViewHolder extends RecyclerView.ViewHolder implements OnClickListener { + + private final SuggestedContactsListener listener; + + private final QuickContactBadge photoView; + private final TextView nameOrNumberView; + private final TextView numberView; + + private String number; + + SuggestionViewHolder(View view, SuggestedContactsListener listener) { + super(view); + photoView = view.findViewById(R.id.avatar); + nameOrNumberView = view.findViewById(R.id.name); + numberView = view.findViewById(R.id.number); + itemView.setOnClickListener(this); + view.findViewById(R.id.overflow).setOnClickListener(this); + this.listener = listener; + } + + public void bind(Context context, Cursor cursor) { + number = cursor.getString(StrequentContactsCursorLoader.PHONE_NUMBER); + number = PhoneNumberUtils.formatNumber(number, GeoUtil.getCurrentCountryIso(context)); + + String name = cursor.getString(StrequentContactsCursorLoader.PHONE_DISPLAY_NAME); + String label = getLabel(context.getResources(), cursor); + String secondaryInfo = + TextUtils.isEmpty(label) + ? number + : context.getString( + com.android.contacts.common.R.string.call_subject_type_and_number, label, number); + + nameOrNumberView.setText(name); + numberView.setText(secondaryInfo); + + long contactId = cursor.getLong(StrequentContactsCursorLoader.PHONE_ID); + String lookupKey = cursor.getString(StrequentContactsCursorLoader.PHONE_LOOKUP_KEY); + Uri contactUri = Contacts.getLookupUri(contactId, lookupKey); + + String photoUri = cursor.getString(StrequentContactsCursorLoader.PHONE_PHOTO_URI); + ContactPhotoManager.getInstance(context) + .loadDialerThumbnailOrPhoto( + photoView, + contactUri, + cursor.getLong(StrequentContactsCursorLoader.PHONE_PHOTO_ID), + photoUri == null ? null : Uri.parse(photoUri), + name, + LetterTileDrawable.TYPE_DEFAULT); + } + + // TODO(calderwoodra): handle CNAP and cequint types. + // TODO(calderwoodra): unify this into a utility method with CallLogAdapter#getNumberType + private static String getLabel(Resources resources, Cursor cursor) { + int numberType = cursor.getInt(StrequentContactsCursorLoader.PHONE_TYPE); + String numberLabel = cursor.getString(StrequentContactsCursorLoader.PHONE_LABEL); + + // Returns empty label instead of "custom" if the custom label is empty. + if (numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(numberLabel)) { + return ""; + } + return (String) Phone.getTypeLabel(resources, numberType, numberLabel); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.overflow) { + listener.onOverFlowMenuClicked(number); + } else { + listener.onRowClicked(number); + } + } + + /** Listener/Callback for {@link SuggestionViewHolder} parents. */ + public interface SuggestedContactsListener { + + void onOverFlowMenuClicked(String number); + + /** Called when a suggested contact is clicked. */ + void onRowClicked(String number); + } +} |