From b06d00924123aa13086be564fee6404215fcc0d5 Mon Sep 17 00:00:00 2001 From: linyuh Date: Thu, 1 Mar 2018 15:05:36 -0800 Subject: Disable phone number formatting for devices with Argentinian SIMs. Bug: 73718977 Test: PhoneNumberHelperTest PiperOrigin-RevId: 187540382 Change-Id: I814ec62b2215c24b8cde3442c5dc83d98ad87164 --- .../android/dialer/app/calllog/CallLogAdapter.java | 3 +- .../app/calllog/CallLogListItemViewHolder.java | 3 +- .../calllog/CallLogNotificationsQueryHelper.java | 3 +- .../app/calllog/LegacyVoicemailNotifier.java | 6 ++-- .../dialer/app/calllog/MissedCallNotifier.java | 6 ++-- .../app/filterednumber/BlockedNumbersAdapter.java | 4 +-- .../dialer/app/list/BlockedListSearchFragment.java | 4 +-- .../app/list/DialerPhoneNumberListAdapter.java | 4 ++- .../calllogutils/PhoneNumberDisplayUtil.java | 6 ++-- .../dialer/dialpadview/DialpadFragment.java | 6 ++-- .../dialer/phonenumbercache/ContactInfoHelper.java | 2 +- .../dialer/phonenumberutil/PhoneNumberHelper.java | 35 ++++++++++++++++++---- .../dialer/speeddial/SuggestionViewHolder.java | 4 +-- 13 files changed, 56 insertions(+), 30 deletions(-) (limited to 'java/com/android/dialer') diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java index baca590b5..4b860fea1 100644 --- a/java/com/android/dialer/app/calllog/CallLogAdapter.java +++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java @@ -52,7 +52,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.android.contacts.common.ContactsUtils; -import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.contacts.common.preference.ContactsPreferences; import com.android.dialer.app.DialtactsActivity; import com.android.dialer.app.R; @@ -1057,7 +1056,7 @@ public class CallLogAdapter extends GroupingListAdapter CharSequence formattedNumber = info.formattedNumber == null ? null - : PhoneNumberUtilsCompat.createTtsSpannable(info.formattedNumber); + : PhoneNumberUtils.createTtsSpannable(info.formattedNumber); details.updateDisplayNumber(activity, formattedNumber, isVoicemailNumber); views.displayNumber = details.displayNumber; diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 5c9411180..4c187faed 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -52,7 +52,6 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.contacts.common.dialog.CallSubjectDialog; import com.android.dialer.app.DialtactsActivity; import com.android.dialer.app.R; @@ -1222,7 +1221,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder menu.setHeaderTitle(context.getResources().getText(R.string.voicemail)); } else { menu.setHeaderTitle( - PhoneNumberUtilsCompat.createTtsSpannable( + PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance().unicodeWrap(number, TextDirectionHeuristics.LTR))); } diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java index d20ddd0e5..3afb6bb87 100644 --- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java +++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java @@ -43,6 +43,7 @@ import com.android.dialer.configprovider.ConfigProviderBindings; import com.android.dialer.location.GeoUtil; import com.android.dialer.phonenumbercache.ContactInfo; import com.android.dialer.phonenumbercache.ContactInfoHelper; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.util.PermissionsUtil; import java.util.ArrayList; import java.util.Arrays; @@ -199,7 +200,7 @@ public class CallLogNotificationsQueryHelper { number = (number == null) ? "" : number; ContactInfo contactInfo = new ContactInfo(); contactInfo.number = number; - contactInfo.formattedNumber = PhoneNumberUtils.formatNumber(number, countryIso); + contactInfo.formattedNumber = PhoneNumberHelper.formatNumber(context, number, countryIso); // contactInfo.normalizedNumber is not PhoneNumberUtils.normalizeNumber. Read ContactInfo. contactInfo.normalizedNumber = PhoneNumberUtils.formatNumberToE164(number, countryIso); diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java index 0ddfb9f3b..7b1536b37 100644 --- a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java +++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java @@ -27,14 +27,15 @@ import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; -import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.text.TextUtils; import com.android.dialer.app.R; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.location.GeoUtil; import com.android.dialer.notification.DialerNotificationManager; import com.android.dialer.notification.NotificationChannelManager; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.telecom.TelecomUtil; /** Shows a notification in the status bar for legacy vociemail. */ @@ -144,7 +145,8 @@ public final class LegacyVoicemailNotifier { } else { return String.format( context.getString(R.string.notification_voicemail_text_format), - PhoneNumberUtils.formatNumber(voicemailNumber)); + PhoneNumberHelper.formatNumber( + context, voicemailNumber, GeoUtil.getCurrentCountryIso(context))); } } diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java index 14bbdfa56..80901ce88 100644 --- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java +++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java @@ -36,12 +36,12 @@ import android.support.v4.util.Pair; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; +import android.telephony.PhoneNumberUtils; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; import android.util.ArraySet; import com.android.contacts.common.ContactsUtils; -import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.dialer.app.DialtactsActivity; import com.android.dialer.app.MainComponent; import com.android.dialer.app.R; @@ -171,7 +171,7 @@ public class MissedCallNotifier implements Worker, Void> { if (TextUtils.equals(contactInfo.name, contactInfo.formattedNumber) || TextUtils.equals(contactInfo.name, contactInfo.number)) { expandedText = - PhoneNumberUtilsCompat.createTtsSpannable( + PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance() .unicodeWrap(contactInfo.name, TextDirectionHeuristics.LTR)); } else { @@ -328,7 +328,7 @@ public class MissedCallNotifier implements Worker, Void> { if (TextUtils.equals(contactInfo.name, contactInfo.formattedNumber) || TextUtils.equals(contactInfo.name, contactInfo.number)) { expandedText = - PhoneNumberUtilsCompat.createTtsSpannable( + PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance() .unicodeWrap(contactInfo.name, TextDirectionHeuristics.LTR)); } else { diff --git a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java index 4f8bc66a9..603c06fd3 100644 --- a/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java +++ b/java/com/android/dialer/app/filterednumber/BlockedNumbersAdapter.java @@ -18,7 +18,6 @@ package com.android.dialer.app.filterednumber; import android.app.FragmentManager; import android.content.Context; import android.database.Cursor; -import android.telephony.PhoneNumberUtils; import android.view.View; import com.android.dialer.app.R; import com.android.dialer.blocking.BlockNumberDialogFragment; @@ -28,6 +27,7 @@ import com.android.dialer.location.GeoUtil; import com.android.dialer.logging.InteractionEvent; import com.android.dialer.logging.Logger; import com.android.dialer.phonenumbercache.ContactInfoHelper; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; /** TODO(calderwoodra): documentation */ public class BlockedNumbersAdapter extends NumbersAdapter { @@ -66,7 +66,7 @@ public class BlockedNumbersAdapter extends NumbersAdapter { id, number, countryIso, - PhoneNumberUtils.formatNumber(number, countryIso), + PhoneNumberHelper.formatNumber(getContext(), number, countryIso), R.id.blocked_numbers_activity_container, getFragmentManager(), new BlockNumberDialogFragment.Callback() { diff --git a/java/com/android/dialer/app/list/BlockedListSearchFragment.java b/java/com/android/dialer/app/list/BlockedListSearchFragment.java index de9dbaee6..ce812af6e 100644 --- a/java/com/android/dialer/app/list/BlockedListSearchFragment.java +++ b/java/com/android/dialer/app/list/BlockedListSearchFragment.java @@ -19,7 +19,6 @@ import android.app.Activity; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; -import android.telephony.PhoneNumberUtils; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -39,6 +38,7 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.location.GeoUtil; import com.android.dialer.logging.InteractionEvent; import com.android.dialer.logging.Logger; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; /** TODO(calderwoodra): documentation */ public class BlockedListSearchFragment extends RegularSearchFragment @@ -174,7 +174,7 @@ public class BlockedListSearchFragment extends RegularSearchFragment id, number, countryIso, - PhoneNumberUtils.formatNumber(number, countryIso), + PhoneNumberHelper.formatNumber(getContext(), number, countryIso), R.id.blocked_numbers_activity_container, getFragmentManager(), BlockedListSearchFragment.this); diff --git a/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java b/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java index 3711e6e75..d5609b856 100644 --- a/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java +++ b/java/com/android/dialer/app/list/DialerPhoneNumberListAdapter.java @@ -31,6 +31,7 @@ import com.android.contacts.common.list.PhoneNumberListAdapter; import com.android.contacts.common.util.ContactDisplayUtils; import com.android.dialer.app.R; import com.android.dialer.location.GeoUtil; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; /** * {@link PhoneNumberListAdapter} with the following added shortcuts, that are displayed as list @@ -228,7 +229,8 @@ public class DialerPhoneNumberListAdapter extends PhoneNumberListAdapter { @Override public void setQueryString(String queryString) { formattedQueryString = - PhoneNumberUtils.formatNumber(PhoneNumberUtils.normalizeNumber(queryString), countryIso); + PhoneNumberHelper.formatNumber( + getContext(), PhoneNumberUtils.normalizeNumber(queryString), countryIso); super.setQueryString(queryString); } } diff --git a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java index f0f696396..6fe3a82c8 100644 --- a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java +++ b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java @@ -18,10 +18,10 @@ package com.android.dialer.calllogutils; import android.content.Context; import android.provider.CallLog.Calls; +import android.telephony.PhoneNumberUtils; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; import android.text.TextUtils; -import com.android.contacts.common.compat.PhoneNumberUtilsCompat; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.google.common.base.Optional; @@ -86,8 +86,8 @@ public class PhoneNumberDisplayUtil { } /** Returns number annotated as phone number in LTR direction. */ - public static CharSequence getTtsSpannableLtrNumber(CharSequence number) { - return PhoneNumberUtilsCompat.createTtsSpannable( + private static CharSequence getTtsSpannableLtrNumber(CharSequence number) { + return PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance().unicodeWrap(number.toString(), TextDirectionHeuristics.LTR)); } } diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index f09333280..eeab6c428 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -88,6 +88,7 @@ import com.android.dialer.location.GeoUtil; import com.android.dialer.logging.UiAction; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.performancereport.PerformanceReport; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.precall.PreCall; import com.android.dialer.proguard.UsedByReflection; import com.android.dialer.telecom.TelecomUtil; @@ -220,8 +221,7 @@ public class DialpadFragment extends Fragment * @return the provided string of digits as a formatted phone number, retaining any post-dial * portion of the string. */ - @VisibleForTesting - static String getFormattedDigits(String dialString, String normalizedNumber, String countryIso) { + String getFormattedDigits(String dialString, String normalizedNumber, String countryIso) { String number = PhoneNumberUtils.extractNetworkPortion(dialString); // Also retrieve the post dial portion of the provided data, so that the entire dial // string can be reconstituted later. @@ -231,7 +231,7 @@ public class DialpadFragment extends Fragment return postDial; } - number = PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso); + number = PhoneNumberHelper.formatNumber(getContext(), number, normalizedNumber, countryIso); if (TextUtils.isEmpty(postDial)) { return number; diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java index f094be8a5..01f9669cb 100644 --- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java +++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java @@ -475,7 +475,7 @@ public class ContactInfoHelper { if (TextUtils.isEmpty(countryIso)) { countryIso = currentCountryIso; } - return PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso); + return PhoneNumberHelper.formatNumber(context, number, normalizedNumber, countryIso); } /** diff --git a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java index b58739d94..f5e634670 100644 --- a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java +++ b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java @@ -35,6 +35,7 @@ import com.android.dialer.compat.CompatUtils; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent; import com.android.dialer.telecom.TelecomUtil; +import com.google.common.base.Ascii; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -224,28 +225,50 @@ public class PhoneNumberHelper { } /** - * @return Formatted phone number. e.g. 1-123-456-7890. Returns the original number if formatting - * failed. + * An enhanced version of {@link PhoneNumberUtils#formatNumber(String, String, String)}. + * + *

The {@link Context} parameter allows us to tweak formatting according to device properties. + * + *

Returns the formatted phone number (e.g, 1-123-456-7890) or the original number if + * formatting fails or is intentionally ignored. */ - public static String formatNumber(@Nullable String number, String countryIso) { + public static String formatNumber( + Context context, @Nullable String number, @Nullable String numberE164, String countryIso) { // The number can be null e.g. schema is voicemail and uri content is empty. if (number == null) { return null; } - String formattedNumber = PhoneNumberUtils.formatNumber(number, countryIso); + + // Argentina phone number formats are complex and PhoneNumberUtils doesn't format all Argentina + // numbers correctly. + // To ensure consistent user experience, we disable phone number formatting for all numbers + // (not just Argentinian ones) for devices with Argentinian SIMs. + TelephonyManager telephonyManager = + (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + if (telephonyManager != null + && "AR".equals(Ascii.toUpperCase(telephonyManager.getSimCountryIso()))) { + return number; + } + + String formattedNumber = PhoneNumberUtils.formatNumber(number, numberE164, countryIso); return formattedNumber != null ? formattedNumber : number; } + /** @see #formatNumber(Context, String, String, String). */ + public static String formatNumber(Context context, @Nullable String number, String countryIso) { + return formatNumber(context, number, /* numberE164 = */ null, countryIso); + } + @Nullable public static CharSequence formatNumberForDisplay( - @Nullable String number, @NonNull String countryIso) { + Context context, @Nullable String number, @NonNull String countryIso) { if (number == null) { return null; } return PhoneNumberUtils.createTtsSpannable( BidiFormatter.getInstance() - .unicodeWrap(formatNumber(number, countryIso), TextDirectionHeuristics.LTR)); + .unicodeWrap(formatNumber(context, number, countryIso), TextDirectionHeuristics.LTR)); } /** diff --git a/java/com/android/dialer/speeddial/SuggestionViewHolder.java b/java/com/android/dialer/speeddial/SuggestionViewHolder.java index 70df30706..68c0ce4c3 100644 --- a/java/com/android/dialer/speeddial/SuggestionViewHolder.java +++ b/java/com/android/dialer/speeddial/SuggestionViewHolder.java @@ -23,7 +23,6 @@ import android.net.Uri; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.support.v7.widget.RecyclerView; -import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; @@ -32,6 +31,7 @@ import android.widget.TextView; import com.android.dialer.contactphoto.ContactPhotoManager; import com.android.dialer.lettertile.LetterTileDrawable; import com.android.dialer.location.GeoUtil; +import com.android.dialer.phonenumberutil.PhoneNumberHelper; /** ViewHolder for displaying suggested contacts in {@link SpeedDialFragment}. */ public class SuggestionViewHolder extends RecyclerView.ViewHolder implements OnClickListener { @@ -56,7 +56,7 @@ public class SuggestionViewHolder extends RecyclerView.ViewHolder implements OnC public void bind(Context context, Cursor cursor) { number = cursor.getString(StrequentContactsCursorLoader.PHONE_NUMBER); - number = PhoneNumberUtils.formatNumber(number, GeoUtil.getCurrentCountryIso(context)); + number = PhoneNumberHelper.formatNumber(context, number, GeoUtil.getCurrentCountryIso(context)); String name = cursor.getString(StrequentContactsCursorLoader.PHONE_DISPLAY_NAME); String label = getLabel(context.getResources(), cursor); -- cgit v1.2.3