1 /* 2 * Copyright (C) 2015 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 package com.android.dialer.filterednumber; 17 18 import android.app.FragmentManager; 19 import android.content.Context; 20 import android.provider.ContactsContract; 21 import android.provider.ContactsContract.CommonDataKinds.Phone; 22 import android.text.BidiFormatter; 23 import android.text.TextDirectionHeuristics; 24 import android.text.TextUtils; 25 import android.view.View; 26 import android.widget.QuickContactBadge; 27 import android.widget.SimpleCursorAdapter; 28 import android.widget.TextView; 29 30 import com.android.contacts.common.ContactPhotoManager; 31 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; 32 import com.android.contacts.common.compat.CompatUtils; 33 import com.android.contacts.common.util.UriUtils; 34 import com.android.dialer.R; 35 import com.android.dialer.calllog.ContactInfo; 36 import com.android.dialer.calllog.ContactInfoHelper; 37 import com.android.dialer.util.PhoneNumberUtil; 38 39 public class NumbersAdapter extends SimpleCursorAdapter { 40 41 private Context mContext; 42 private FragmentManager mFragmentManager; 43 private ContactInfoHelper mContactInfoHelper; 44 private BidiFormatter mBidiFormatter = BidiFormatter.getInstance(); 45 private ContactPhotoManager mContactPhotoManager; 46 NumbersAdapter( Context context, FragmentManager fragmentManager, ContactInfoHelper contactInfoHelper, ContactPhotoManager contactPhotoManager)47 public NumbersAdapter( 48 Context context, 49 FragmentManager fragmentManager, 50 ContactInfoHelper contactInfoHelper, 51 ContactPhotoManager contactPhotoManager) { 52 super(context, R.layout.blocked_number_item, null, new String[]{}, new int[]{}, 0); 53 mContext = context; 54 mFragmentManager = fragmentManager; 55 mContactInfoHelper = contactInfoHelper; 56 mContactPhotoManager = contactPhotoManager; 57 } 58 updateView(View view, String number, String countryIso)59 public void updateView(View view, String number, String countryIso) { 60 final TextView callerName = (TextView) view.findViewById(R.id.caller_name); 61 final TextView callerNumber = (TextView) view.findViewById(R.id.caller_number); 62 final QuickContactBadge quickContactBadge = 63 (QuickContactBadge) view.findViewById(R.id.quick_contact_photo); 64 quickContactBadge.setOverlay(null); 65 if (CompatUtils.hasPrioritizedMimeType()) { 66 quickContactBadge.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE); 67 } 68 69 ContactInfo info = mContactInfoHelper.lookupNumber(number, countryIso); 70 if (info == null) { 71 info = new ContactInfo(); 72 info.number = number; 73 } 74 final CharSequence locationOrType = getNumberTypeOrLocation(info); 75 final String displayNumber = getDisplayNumber(info); 76 final String displayNumberStr = mBidiFormatter.unicodeWrap(displayNumber, 77 TextDirectionHeuristics.LTR); 78 79 String nameForDefaultImage; 80 if (!TextUtils.isEmpty(info.name)) { 81 nameForDefaultImage = info.name; 82 callerName.setText(info.name); 83 callerNumber.setText(locationOrType + " " + displayNumberStr); 84 } else { 85 nameForDefaultImage = displayNumber; 86 callerName.setText(displayNumberStr); 87 if (!TextUtils.isEmpty(locationOrType)) { 88 callerNumber.setText(locationOrType); 89 callerNumber.setVisibility(View.VISIBLE); 90 } else { 91 callerNumber.setVisibility(View.GONE); 92 } 93 } 94 loadContactPhoto(info, nameForDefaultImage, quickContactBadge); 95 } 96 loadContactPhoto(ContactInfo info, String displayName, QuickContactBadge badge)97 private void loadContactPhoto(ContactInfo info, String displayName, QuickContactBadge badge) { 98 final String lookupKey = info.lookupUri == null 99 ? null : UriUtils.getLookupKeyFromUri(info.lookupUri); 100 final int contactType = mContactInfoHelper.isBusiness(info.sourceType) 101 ? ContactPhotoManager.TYPE_BUSINESS : ContactPhotoManager.TYPE_DEFAULT; 102 final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey, 103 contactType, true /* isCircular */); 104 badge.assignContactUri(info.lookupUri); 105 badge.setContentDescription( 106 mContext.getResources().getString(R.string.description_contact_details, displayName)); 107 mContactPhotoManager.loadDirectoryPhoto(badge, info.photoUri, 108 false /* darkTheme */, true /* isCircular */, request); 109 } 110 getDisplayNumber(ContactInfo info)111 private String getDisplayNumber(ContactInfo info) { 112 if (!TextUtils.isEmpty(info.formattedNumber)) { 113 return info.formattedNumber; 114 } else if (!TextUtils.isEmpty(info.number)) { 115 return info.number; 116 } else { 117 return ""; 118 } 119 } 120 getNumberTypeOrLocation(ContactInfo info)121 private CharSequence getNumberTypeOrLocation(ContactInfo info) { 122 if (!TextUtils.isEmpty(info.name)) { 123 return ContactsContract.CommonDataKinds.Phone.getTypeLabel( 124 mContext.getResources(), info.type, info.label); 125 } else { 126 return PhoneNumberUtil.getGeoDescription(mContext, info.number); 127 } 128 } 129 getContext()130 protected Context getContext() { 131 return mContext; 132 } 133 getFragmentManager()134 protected FragmentManager getFragmentManager() { 135 return mFragmentManager; 136 } 137 } 138