• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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