From 36aeec91ed927b7fe3a27bcd5e224443899117f1 Mon Sep 17 00:00:00 2001 From: Brandon Maxwell Date: Fri, 23 Oct 2015 12:01:00 -0700 Subject: CallDetailActivity respect display name order - Updated the CallDetailActivity to choose whether to show last name first or first name first based on user preferences. - Modified callLog code to behave in a similar fashion - Fixed bug in ContactInfoHelperTests - Rename PhoneCallDetails.name -> PhoneCallDetails.namePrimary Bug: 19364093 Change-Id: I50971ad0f26f6ede49f1c82965d1b00ce0cba4d3 --- src/com/android/dialer/CallDetailActivity.java | 18 ++++++++++------ src/com/android/dialer/PhoneCallDetails.java | 25 +++++++++++++++++++++- src/com/android/dialer/calllog/CallLogAdapter.java | 7 +++--- .../dialer/calllog/CallLogAsyncTaskUtil.java | 3 ++- .../dialer/calllog/CallLogListItemHelper.java | 4 ++-- .../dialer/calllog/PhoneCallDetailsHelper.java | 12 +++++------ 6 files changed, 49 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java index 284a5785e..2aff61c4c 100644 --- a/src/com/android/dialer/CallDetailActivity.java +++ b/src/com/android/dialer/CallDetailActivity.java @@ -24,7 +24,6 @@ import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.support.v7.app.AppCompatActivity; -import android.telecom.PhoneAccountHandle; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; @@ -45,6 +44,7 @@ import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.GeoUtil; import com.android.contacts.common.interactions.TouchPointManager; +import com.android.contacts.common.preference.ContactsPreferences; import com.android.contacts.common.testing.NeededForTesting; import com.android.contacts.common.util.UriUtils; import com.android.dialer.calllog.CallDetailHistoryAdapter; @@ -109,7 +109,6 @@ public class CallDetailActivity extends AppCompatActivity mDetails = details[0]; mNumber = TextUtils.isEmpty(mDetails.number) ? null : mDetails.number.toString(); mDisplayNumber = mDetails.displayNumber; - final int numberPresentation = mDetails.numberPresentation; final CharSequence callLocationOrType = getNumberTypeOrLocation(mDetails); @@ -117,8 +116,10 @@ public class CallDetailActivity extends AppCompatActivity final String displayNumberStr = mBidiFormatter.unicodeWrap( displayNumber.toString(), TextDirectionHeuristics.LTR); - if (!TextUtils.isEmpty(mDetails.name)) { - mCallerName.setText(mDetails.name); + mDetails.nameDisplayOrder = mContactsPreferences.getDisplayOrder(); + + if (!TextUtils.isEmpty(mDetails.getPreferredName())) { + mCallerName.setText(mDetails.getPreferredName()); mCallerNumber.setText(callLocationOrType + " " + displayNumberStr); } else { mCallerName.setText(displayNumberStr); @@ -174,7 +175,7 @@ public class CallDetailActivity extends AppCompatActivity * @return The phone number type or location. */ private CharSequence getNumberTypeOrLocation(PhoneCallDetails details) { - if (!TextUtils.isEmpty(details.name)) { + if (!TextUtils.isEmpty(details.namePrimary)) { return Phone.getTypeLabel(mResources, details.numberType, details.numberLabel); } else { @@ -185,6 +186,7 @@ public class CallDetailActivity extends AppCompatActivity private Context mContext; private ContactInfoHelper mContactInfoHelper; + private ContactsPreferences mContactsPreferences; private CallTypeHelper mCallTypeHelper; private ContactPhotoManager mContactPhotoManager; private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler; @@ -223,6 +225,7 @@ public class CallDetailActivity extends AppCompatActivity mContext = this; mResources = getResources(); mContactInfoHelper = new ContactInfoHelper(this, GeoUtil.getCurrentCountryIso(this)); + mContactsPreferences = new ContactsPreferences(mContext); mCallTypeHelper = new CallTypeHelper(getResources()); mFilteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(getContentResolver()); @@ -280,6 +283,7 @@ public class CallDetailActivity extends AppCompatActivity @Override public void onResume() { super.onResume(); + mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY); getCallDetails(); } @@ -436,8 +440,8 @@ public class CallDetailActivity extends AppCompatActivity contactType = ContactPhotoManager.TYPE_BUSINESS; } - final String displayName = TextUtils.isEmpty(mDetails.name) - ? mDetails.displayNumber : mDetails.name.toString(); + final String displayName = TextUtils.isEmpty(mDetails.namePrimary) + ? mDetails.displayNumber : mDetails.namePrimary.toString(); final String lookupKey = mDetails.contactUri == null ? null : UriUtils.getLookupKeyFromUri(mDetails.contactUri); diff --git a/src/com/android/dialer/PhoneCallDetails.java b/src/com/android/dialer/PhoneCallDetails.java index 403c4e86c..fb1827dc4 100644 --- a/src/com/android/dialer/PhoneCallDetails.java +++ b/src/com/android/dialer/PhoneCallDetails.java @@ -16,12 +16,14 @@ package com.android.dialer; +import com.android.contacts.common.preference.ContactsPreferences; import com.android.dialer.calllog.PhoneNumberDisplayUtil; import android.content.Context; import android.net.Uri; import android.provider.CallLog.Calls; import android.telecom.PhoneAccountHandle; +import android.text.TextUtils; /** * The details of a phone call to be shown in the UI. @@ -50,7 +52,14 @@ public class PhoneCallDetails { // The duration of the call in milliseconds, or 0 for missed calls. public long duration; // The name of the contact, or the empty string. - public CharSequence name; + public CharSequence namePrimary; + // The alternative name of the contact, e.g. last name first, or the empty string + public CharSequence nameAlternative; + /** + * The user's preference on name display order, last name first or first time first. + * {@see ContactsPreferences} + */ + public int nameDisplayOrder; // The type of phone, e.g., {@link Phone#TYPE_HOME}, 0 if not available. public int numberType; // The custom label associated with the phone number in the contact, or the empty string. @@ -117,4 +126,18 @@ public class PhoneCallDetails { this.formattedNumber, this.isVoicemail).toString(); } + + /** + * Returns the preferred name for the call details as specified by the + * {@link #nameDisplayOrder} + * + * @return the preferred name + */ + public CharSequence getPreferredName() { + if (nameDisplayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY + || TextUtils.isEmpty(nameAlternative)) { + return namePrimary; + } + return nameAlternative; + } } diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index ae20e4943..01af982f3 100644 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -465,10 +465,11 @@ public class CallLogAdapter extends GroupingListAdapter details.dataUsage = c.getLong(CallLogQuery.DATA_USAGE); } - String preferredName = getPreferredDisplayName(info); - if (!TextUtils.isEmpty(preferredName)) { + if (!TextUtils.isEmpty(info.name) || !TextUtils.isEmpty(info.nameAlternative)) { details.contactUri = info.lookupUri; - details.name = preferredName; + details.namePrimary = info.name; + details.nameAlternative = info.nameAlternative; + details.nameDisplayOrder = mContactsPreferences.getDisplayOrder(); details.numberType = info.type; details.numberLabel = info.label; details.photoUri = info.photoUri; diff --git a/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java b/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java index 89932ffce..2fffaff8d 100644 --- a/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java +++ b/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java @@ -189,7 +189,8 @@ public class CallLogAsyncTaskUtil { details.accountHandle = accountHandle; details.contactUri = info.lookupUri; - details.name = info.name; + details.namePrimary = info.name; + details.nameAlternative = info.nameAlternative; details.numberType = info.type; details.numberLabel = info.label; details.photoUri = info.photoUri; diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java index 84d036487..f856bf924 100644 --- a/src/com/android/dialer/calllog/CallLogListItemHelper.java +++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java @@ -260,8 +260,8 @@ import com.android.dialer.R; */ private CharSequence getNameOrNumber(PhoneCallDetails details) { final CharSequence recipient; - if (!TextUtils.isEmpty(details.name)) { - recipient = details.name; + if (!TextUtils.isEmpty(details.getPreferredName())) { + recipient = details.getPreferredName(); } else { recipient = details.displayNumber; } diff --git a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java index b16079a9c..96dbf8219 100644 --- a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java +++ b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java @@ -132,12 +132,12 @@ public class PhoneCallDetailsHelper { final CharSequence nameText; final CharSequence displayNumber = details.displayNumber; - if (TextUtils.isEmpty(details.name)) { + if (TextUtils.isEmpty(details.getPreferredName())) { nameText = displayNumber; // We have a real phone number as "nameView" so make it always LTR views.nameView.setTextDirection(View.TEXT_DIRECTION_LTR); } else { - nameText = details.name; + nameText = details.getPreferredName(); } views.nameView.setText(nameText); @@ -200,7 +200,7 @@ public class PhoneCallDetailsHelper { && !PhoneNumberHelper.isUriNumber(details.number.toString()) && !mTelecomCallLogCache.isVoicemailNumber(details.accountHandle, details.number)) { - if (TextUtils.isEmpty(details.name) && !TextUtils.isEmpty(details.geocode)) { + if (TextUtils.isEmpty(details.namePrimary) && !TextUtils.isEmpty(details.geocode)) { numberFormattedLabel = details.geocode; } else if (!(details.numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(details.numberLabel))) { @@ -210,7 +210,7 @@ public class PhoneCallDetailsHelper { } } - if (!TextUtils.isEmpty(details.name) && TextUtils.isEmpty(numberFormattedLabel)) { + if (!TextUtils.isEmpty(details.namePrimary) && TextUtils.isEmpty(numberFormattedLabel)) { numberFormattedLabel = details.displayNumber; } return numberFormattedLabel; @@ -284,8 +284,8 @@ public class PhoneCallDetailsHelper { @NeededForTesting public void setCallDetailsHeader(TextView nameView, PhoneCallDetails details) { final CharSequence nameText; - if (!TextUtils.isEmpty(details.name)) { - nameText = details.name; + if (!TextUtils.isEmpty(details.namePrimary)) { + nameText = details.namePrimary; } else if (!TextUtils.isEmpty(details.displayNumber)) { nameText = details.displayNumber; } else { -- cgit v1.2.3