From 7de107bff21b046c50a42bebf57eb244772412e9 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Wed, 26 Aug 2015 19:08:30 -0700 Subject: Don't strip post dial string when handling DIAL intent Also add tests and update test APK manifest to allow it to be installed. Bug: 22007312 Change-Id: Ibc71d9efd8666c38b0d879a27dae3f5642ce383c --- .../android/dialer/dialpad/DialpadFragment.java | 41 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index 3792a1d9f..01dc892e5 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -560,19 +560,48 @@ public class DialpadFragment extends Fragment * Sets formatted digits to digits field. */ private void setFormattedDigits(String data, String normalizedNumber) { - // strip the non-dialable numbers out of the data string. - String dialString = PhoneNumberUtils.extractNetworkPortion(data); - dialString = - PhoneNumberUtils.formatNumber(dialString, normalizedNumber, mCurrentCountryIso); - if (!TextUtils.isEmpty(dialString)) { + final String formatted = getFormattedDigits(data, normalizedNumber, mCurrentCountryIso); + if (!TextUtils.isEmpty(formatted)) { Editable digits = mDigits.getText(); - digits.replace(0, digits.length(), dialString); + digits.replace(0, digits.length(), formatted); // for some reason this isn't getting called in the digits.replace call above.. // but in any case, this will make sure the background drawable looks right afterTextChanged(digits); } } + /** + * Format the provided string of digits into one that represents a properly formatted phone + * number. + * + * @param dialString String of characters to format + * @param normalizedNumber the E164 format number whose country code is used if the given + * phoneNumber doesn't have the country code. + * @param countryIso The country code representing the format to use if the provided normalized + * number is null or invalid. + * @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 number = PhoneNumberUtils.extractNetworkPortion(dialString); + // Also retrieve the post dial portion of the provided data, so that the entire dial + // string can be reconstituted later. + final String postDial = PhoneNumberUtils.extractPostDialPortion(dialString); + + if (TextUtils.isEmpty(number)) { + return postDial; + } + + number = PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso); + + if (TextUtils.isEmpty(postDial)) { + return number; + } + + return number.concat(postDial); + } + private void configureKeypadListeners(View fragmentView) { final int[] buttonIds = new int[] {R.id.one, R.id.two, R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.zero, R.id.pound}; -- cgit v1.2.3