blob: 0622390f949f16e71af96e02f7e8f62be5c1e748 [file] [log] [blame]
/*
* Copyright (C) 2016 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.contacts.callblocking;
import android.app.FragmentManager;
import android.content.Context;
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.contacts.R;
import com.android.contacts.callblocking.ContactInfo;
import com.android.contacts.callblocking.ContactInfoHelper;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.util.UriUtils;
import java.util.Locale;
public class NumbersAdapter extends SimpleCursorAdapter {
private Context mContext;
private FragmentManager mFragmentManager;
private ContactInfoHelper mContactInfoHelper;
private BidiFormatter mBidiFormatter = BidiFormatter.getInstance();
private ContactPhotoManager mContactPhotoManager;
public NumbersAdapter(
Context context,
FragmentManager fragmentManager,
ContactInfoHelper contactInfoHelper,
ContactPhotoManager contactPhotoManager) {
super(context, R.layout.blocked_number_item, null, new String[]{}, new int[]{}, 0);
mContext = context;
mFragmentManager = fragmentManager;
mContactInfoHelper = contactInfoHelper;
mContactPhotoManager = contactPhotoManager;
}
public void updateView(View view, String number, String countryIso) {
// TODO: add touch feedback on list item.
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 = mContactInfoHelper.lookupNumber(number, countryIso);
if (info == null) {
info = new ContactInfo();
info.number = number;
}
final CharSequence locationOrType = getNumberTypeOrLocation(info);
final String displayNumber = getDisplayNumber(info);
final String displayNumberStr = mBidiFormatter.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 DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
ContactPhotoManager.TYPE_DEFAULT, /* isCircular */ true);
badge.assignContactUri(info.lookupUri);
badge.setContentDescription(
mContext.getResources().getString(R.string.description_contact_details, displayName));
mContactPhotoManager.loadDirectoryPhoto(badge, info.photoUri,
/* darkTheme */ false, /* isCircular */ true, 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) {
if (!TextUtils.isEmpty(info.name)) {
return Phone.getTypeLabel(
mContext.getResources(), info.type, info.label);
} else {
return FilteredNumbersUtil.getGeoDescription(mContext, info.number);
}
}
protected Context getContext() {
return mContext;
}
protected FragmentManager getFragmentManager() {
return mFragmentManager;
}
}