/* * Copyright (C) 2015 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.app.filterednumber; import android.app.FragmentManager; import android.content.Context; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; import android.view.View; import android.widget.QuickContactBadge; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.android.dialer.app.R; import com.android.dialer.compat.CompatUtils; import com.android.dialer.contactphoto.ContactPhotoManager; import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest; import com.android.dialer.lettertile.LetterTileDrawable; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.util.UriUtils; /** TODO(calderwoodra): documentation */ public class NumbersAdapter extends SimpleCursorAdapter { private final Context context; private final FragmentManager fragmentManager; private final ContactInfoHelper contactInfoHelper; private final BidiFormatter bidiFormatter = BidiFormatter.getInstance(); private final ContactPhotoManager contactPhotoManager; public NumbersAdapter( Context context, FragmentManager fragmentManager, ContactInfoHelper contactInfoHelper, ContactPhotoManager contactPhotoManager) { super(context, R.layout.blocked_number_item, null, new String[] {}, new int[] {}, 0); this.context = context; this.fragmentManager = fragmentManager; this.contactInfoHelper = contactInfoHelper; this.contactPhotoManager = contactPhotoManager; } public void updateView(View view, String number, String countryIso) { final TextView callerName = (TextView) view.findViewById(R.id.caller_name); final TextView callerNumber = (TextView) view.findViewById(R.id.caller_number); final QuickContactBadge quickContactBadge = (QuickContactBadge) view.findViewById(R.id.quick_contact_photo); quickContactBadge.setOverlay(null); if (CompatUtils.hasPrioritizedMimeType()) { quickContactBadge.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE); } ContactInfo info = contactInfoHelper.lookupNumber(number, countryIso); if (info == null) { info = new ContactInfo(); info.number = number; } final CharSequence locationOrType = getNumberTypeOrLocation(info, countryIso); final String displayNumber = getDisplayNumber(info); final String displayNumberStr = bidiFormatter.unicodeWrap(displayNumber, TextDirectionHeuristics.LTR); String nameForDefaultImage; if (!TextUtils.isEmpty(info.name)) { nameForDefaultImage = info.name; callerName.setText(info.name); callerNumber.setText(locationOrType + " " + displayNumberStr); } else { nameForDefaultImage = displayNumber; callerName.setText(displayNumberStr); if (!TextUtils.isEmpty(locationOrType)) { callerNumber.setText(locationOrType); callerNumber.setVisibility(View.VISIBLE); } else { callerNumber.setVisibility(View.GONE); } } loadContactPhoto(info, nameForDefaultImage, quickContactBadge); } private void loadContactPhoto(ContactInfo info, String displayName, QuickContactBadge badge) { final String lookupKey = info.lookupUri == null ? null : UriUtils.getLookupKeyFromUri(info.lookupUri); final int contactType = contactInfoHelper.isBusiness(info.sourceType) ? LetterTileDrawable.TYPE_BUSINESS : LetterTileDrawable.TYPE_DEFAULT; final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey, contactType, true /* isCircular */); badge.assignContactUri(info.lookupUri); badge.setContentDescription( context.getResources().getString(R.string.description_contact_details, displayName)); contactPhotoManager.loadDirectoryPhoto( badge, info.photoUri, false /* darkTheme */, true /* isCircular */, request); } private String getDisplayNumber(ContactInfo info) { if (!TextUtils.isEmpty(info.formattedNumber)) { return info.formattedNumber; } else if (!TextUtils.isEmpty(info.number)) { return info.number; } else { return ""; } } private CharSequence getNumberTypeOrLocation(ContactInfo info, String countryIso) { if (!TextUtils.isEmpty(info.name)) { return ContactsContract.CommonDataKinds.Phone.getTypeLabel( context.getResources(), info.type, info.label); } else { return PhoneNumberHelper.getGeoDescription(context, info.number, countryIso); } } protected Context getContext() { return context; } protected FragmentManager getFragmentManager() { return fragmentManager; } }