diff options
author | Andrew Lee <anwlee@google.com> | 2015-10-16 11:42:59 -0700 |
---|---|---|
committer | Andrew Lee <anwlee@google.com> | 2015-10-19 18:03:46 -0700 |
commit | e98dd55998f2d427976a005c759c26d98785d9c9 (patch) | |
tree | 7e60fed6007f0fda0beb62da701007458cd01be3 | |
parent | 8d0847ca13ca46730756e1d3a3dff3d7d27fd18b (diff) |
Create superclass for BlockedNumberAdapter.
To facilitate reusings the same views and adapter for both the
manage blocked numbers list and the import list. The two will
use different cursors because they are pulling data from different
places (Contacts db vs FilteredNumbers db), and it seemed better
to reuse code rather than creating parallel implementations.
Bug: 23351616
Change-Id: I5cac5f2a6b8b3bf4a6e8f54c8bc3f1c1500ac5e7
3 files changed, 157 insertions, 92 deletions
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java b/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java index 1f5ecd683..93b99b467 100644 --- a/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java +++ b/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java @@ -16,69 +16,48 @@ package com.android.dialer.filterednumber; import android.app.Activity; -import android.content.Context; -import android.content.res.Resources; +import android.app.FragmentManager; import android.database.Cursor; -import android.provider.ContactsContract; -import android.text.BidiFormatter; -import android.text.TextDirectionHeuristics; -import android.text.TextUtils; +import android.content.Context; import android.view.View; -import android.widget.QuickContactBadge; -import android.widget.SimpleCursorAdapter; -import android.widget.TextView; import com.android.contacts.common.ContactPhotoManager; -import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.GeoUtil; -import com.android.contacts.common.util.UriUtils; import com.android.dialer.R; -import com.android.dialer.calllog.ContactInfo; import com.android.dialer.calllog.ContactInfoHelper; import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns; -import com.android.dialer.util.PhoneNumberUtil; -public class BlockedNumberAdapter extends SimpleCursorAdapter { +public class BlockedNumberAdapter extends NumberAdapter { - private Context mContext; - private ContactInfoHelper mContactInfoHelper; - private Resources mResources; - private BidiFormatter mBidiFormatter = BidiFormatter.getInstance(); - private ContactPhotoManager mContactPhotoManager; + public BlockedNumberAdapter( + Context context, + FragmentManager fragmentManager, + ContactInfoHelper contactInfoHelper, + ContactPhotoManager contactPhotoManager) { + super(context, fragmentManager, contactInfoHelper, contactPhotoManager); + } - public BlockedNumberAdapter(Context context) { - super(context, R.layout.blocked_number_item, null, new String[]{}, new int[]{}, 0); - mContext = context; - mContactInfoHelper = new ContactInfoHelper(context, GeoUtil.getCurrentCountryIso(context)); - mContactPhotoManager = ContactPhotoManager.getInstance(context); - mResources = context.getResources(); + public static BlockedNumberAdapter newBlockedNumberAdapter( + Context context, FragmentManager fragmentManager) { + return new BlockedNumberAdapter( + context, + fragmentManager, + new ContactInfoHelper(context, GeoUtil.getCurrentCountryIso(context)), + ContactPhotoManager.getInstance(context)); } @Override public void bindView(View view, Context context, Cursor cursor) { super.bindView(view, context, cursor); - final TextView callerName = (TextView) view.findViewById(R.id.caller_name); - final TextView callerNumber = (TextView) view.findViewById(R.id.caller_number); - final View deleteNumber = view.findViewById(R.id.delete_button); - final QuickContactBadge quickContactBadge = - (QuickContactBadge) view.findViewById(R.id.quick_contact_photo); - quickContactBadge.setOverlay(null); - quickContactBadge.setPrioritizedMimeType( - ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); - final Integer id = cursor.getInt(cursor.getColumnIndex(FilteredNumberColumns._ID)); final String countryIso = cursor.getString(cursor.getColumnIndex( FilteredNumberColumns.COUNTRY_ISO)); final String number = cursor.getString(cursor.getColumnIndex(FilteredNumberColumns.NUMBER)); final String normalizedNumber = cursor.getString(cursor.getColumnIndex( FilteredNumberColumns.NORMALIZED_NUMBER)); - final ContactInfo info = mContactInfoHelper.lookupNumber(number, countryIso); - final CharSequence locationOrType = getNumberTypeOrLocation(info); - final String displayNumber = getDisplayNumber(info); - final String displayNumberStr = mBidiFormatter.unicodeWrap( - displayNumber.toString(), TextDirectionHeuristics.LTR); - deleteNumber.setOnClickListener(new View.OnClickListener() { + final View deleteButton = view.findViewById(R.id.delete_button); + deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { FilterNumberDialogFragment.show( @@ -86,61 +65,13 @@ public class BlockedNumberAdapter extends SimpleCursorAdapter { normalizedNumber, number, countryIso, - displayNumber, + null, R.id.blocked_number_fragment, - ((Activity) mContext).getFragmentManager(), + getFragmentManager(), null /* callback */); } }); - 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 = mContactInfoHelper.isBusiness(info.sourceType) - ? ContactPhotoManager.TYPE_BUSINESS : ContactPhotoManager.TYPE_DEFAULT; - final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey, - contactType, true /* isCircular */); - badge.assignContactUri(info.lookupUri); - badge.setContentDescription( - mResources.getString(R.string.description_contact_details, displayName)); - mContactPhotoManager.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) { - if (!TextUtils.isEmpty(info.name)) { - return ContactsContract.CommonDataKinds.Phone.getTypeLabel(mResources, info.type, - info.label); - } else { - return PhoneNumberUtil.getGeoDescription(mContext, info.number); - } + updateView(view, number, countryIso); } } diff --git a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java index 5740305f7..10d6ff6ee 100644 --- a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java +++ b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java @@ -52,7 +52,8 @@ public class BlockedNumberFragment extends ListFragment implements LayoutInflater inflater = LayoutInflater.from(getContext()); getListView().addHeaderView(inflater.inflate(R.layout.blocked_number_header, null)); if (mAdapter == null) { - mAdapter = new BlockedNumberAdapter(getContext()); + mAdapter = BlockedNumberAdapter.newBlockedNumberAdapter( + getContext(), getActivity().getFragmentManager()); } setListAdapter(mAdapter); diff --git a/src/com/android/dialer/filterednumber/NumberAdapter.java b/src/com/android/dialer/filterednumber/NumberAdapter.java new file mode 100644 index 000000000..b212fa3e2 --- /dev/null +++ b/src/com/android/dialer/filterednumber/NumberAdapter.java @@ -0,0 +1,133 @@ +/* + * 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.filterednumber; + +import android.app.Activity; +import android.app.FragmentManager; +import android.content.Context; +import android.content.res.Resources; +import android.provider.ContactsContract; +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.common.ContactPhotoManager; +import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; +import com.android.contacts.common.util.UriUtils; +import com.android.dialer.R; +import com.android.dialer.calllog.ContactInfo; +import com.android.dialer.calllog.ContactInfoHelper; +import com.android.dialer.util.PhoneNumberUtil; + +public class NumberAdapter extends SimpleCursorAdapter { + + private Context mContext; + private FragmentManager mFragmentManager; + private ContactInfoHelper mContactInfoHelper; + private Resources mResources; + private BidiFormatter mBidiFormatter = BidiFormatter.getInstance(); + private ContactPhotoManager mContactPhotoManager; + + public NumberAdapter( + 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) { + 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); + quickContactBadge.setPrioritizedMimeType( + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); + + final ContactInfo info = mContactInfoHelper.lookupNumber(number, countryIso); + final CharSequence locationOrType = getNumberTypeOrLocation(info); + final String displayNumber = getDisplayNumber(info); + final String displayNumberStr = mBidiFormatter.unicodeWrap( + displayNumber.toString(), 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 = mContactInfoHelper.isBusiness(info.sourceType) + ? ContactPhotoManager.TYPE_BUSINESS : ContactPhotoManager.TYPE_DEFAULT; + final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey, + contactType, true /* isCircular */); + badge.assignContactUri(info.lookupUri); + badge.setContentDescription( + mContext.getResources().getString(R.string.description_contact_details, displayName)); + mContactPhotoManager.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) { + if (!TextUtils.isEmpty(info.name)) { + return ContactsContract.CommonDataKinds.Phone.getTypeLabel( + mContext.getResources(), info.type, info.label); + } else { + return PhoneNumberUtil.getGeoDescription(mContext, info.number); + } + } + + protected Context getContext() { + return mContext; + } + + protected FragmentManager getFragmentManager() { + return mFragmentManager; + } +} |