/** * Implementation copied from {@link PhoneNumberUtils#normalizeNumber} */ private static String normalizeNumberInternal(String phoneNumber) { if (TextUtils.isEmpty(phoneNumber)) { return ""; } StringBuilder sb = new StringBuilder(); int len = phoneNumber.length(); for (int i = 0; i < len; i++) { char c = phoneNumber.charAt(i); // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.) int digit = Character.digit(c, 10); if (digit != -1) { sb.append(digit); } else if (sb.length() == 0 && c == '+') { sb.append(c); } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber)); } } return sb.toString(); }
/** * Normalize a phone number by removing the characters other than digits. If * the given number has keypad letters, the letters will be converted to * digits first. * * @param phoneNumber The number to be normalized. * @return The normalized number. * * TODO: Remove if PhoneNumberUtils.normalizeNumber(String phoneNumber) is made public. */ public static String normalizeNumber(String phoneNumber) { StringBuilder sb = new StringBuilder(); int len = phoneNumber.length(); for (int i = 0; i < len; i++) { char c = phoneNumber.charAt(i); // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.) int digit = Character.digit(c, 10); if (digit != -1) { sb.append(digit); } else if (i == 0 && c == '+') { sb.append(c); } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber)); } } return sb.toString(); }
@Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { final String converted = PhoneNumberUtils.convertKeypadLettersToDigits( PhoneNumberUtils.replaceUnicodeDigits(source.toString())); // PhoneNumberUtils.replaceUnicodeDigits performs a character for character replacement, // so we can assume that start and end positions should remain unchanged. CharSequence result = super.filter(converted, start, end, dest, dstart, dend); if (result == null) { if (source.equals(converted)) { // There was no conversion or filtering performed. Just return null according to // the behavior of DialerKeyListener. return null; } else { // filter returns null if the charsequence is to be returned unchanged/unfiltered. // But in this case we do want to return a modified character string (even if // none of the characters in the modified string are filtered). So if // result == null we return the unfiltered but converted numeric string instead. return converted.subSequence(start, end); } } return result; } }
final String converted = PhoneNumberUtils.convertKeypadLettersToDigits( PhoneNumberUtils.replaceUnicodeDigits(data)); setFormattedDigits(converted, null);
final String dataPart1 = PhoneNumberUtils.convertKeypadLettersToDigits(dataParts1[i]); final String dataPart2 = dataParts2[i];