blob: 3acb204e08950d48315aec4a366c1dda37e69bcc [file] [log] [blame]
/*
* 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;
}
}