diff options
| author | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-11-05 09:43:19 +0900 |
|---|---|---|
| committer | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-11-05 09:44:42 +0900 |
| commit | 26ee0ae9de37e50b790a0a7b7bddb1d27d5b1214 (patch) | |
| tree | fa47f71fc0aaca5db07aa8a151e280a5a087736a /core/java/android/pim | |
| parent | 0d55daffc31c123dcf83f6db85f8198854ddc564 (diff) | |
| download | frameworks_base-26ee0ae9de37e50b790a0a7b7bddb1d27d5b1214.zip frameworks_base-26ee0ae9de37e50b790a0a7b7bddb1d27d5b1214.tar.gz frameworks_base-26ee0ae9de37e50b790a0a7b7bddb1d27d5b1214.tar.bz2 | |
Make vCard importer handle "PAGER" phone number correctly.
Add tests for it.
Internal issue number: 2239492
Diffstat (limited to 'core/java/android/pim')
| -rw-r--r-- | core/java/android/pim/vcard/ContactStruct.java | 31 | ||||
| -rw-r--r-- | core/java/android/pim/vcard/VCardUtils.java | 21 |
2 files changed, 37 insertions, 15 deletions
diff --git a/core/java/android/pim/vcard/ContactStruct.java b/core/java/android/pim/vcard/ContactStruct.java index cab9dc1..0732c51 100644 --- a/core/java/android/pim/vcard/ContactStruct.java +++ b/core/java/android/pim/vcard/ContactStruct.java @@ -471,20 +471,24 @@ public class ContactStruct { } StringBuilder builder = new StringBuilder(); String trimed = data.trim(); - int length = trimed.length(); - for (int i = 0; i < length; i++) { - char ch = trimed.charAt(i); - if (('0' <= ch && ch <= '9') || (i == 0 && ch == '+')) { - builder.append(ch); + final String formattedNumber; + if (type == Phone.TYPE_PAGER) { + formattedNumber = trimed; + } else { + final int length = trimed.length(); + for (int i = 0; i < length; i++) { + char ch = trimed.charAt(i); + if (('0' <= ch && ch <= '9') || (i == 0 && ch == '+')) { + builder.append(ch); + } } - } - // Use NANP in default when there's no information about locale. - final int formattingType = (VCardConfig.isJapaneseDevice(mVCardType) ? - PhoneNumberUtils.FORMAT_JAPAN : PhoneNumberUtils.FORMAT_NANP); - final String formattedPhoneNumber = - PhoneNumberUtils.formatNumber(builder.toString(), formattingType); - PhoneData phoneData = new PhoneData(type, formattedPhoneNumber, label, isPrimary); + // Use NANP in default when there's no information about locale. + final int formattingType = (VCardConfig.isJapaneseDevice(mVCardType) ? + PhoneNumberUtils.FORMAT_JAPAN : PhoneNumberUtils.FORMAT_NANP); + formattedNumber = PhoneNumberUtils.formatNumber(builder.toString(), formattingType); + } + PhoneData phoneData = new PhoneData(type, formattedNumber, label, isPrimary); mPhoneList.add(phoneData); } @@ -856,7 +860,8 @@ public class ContactStruct { } } else if (propName.equals(Constants.PROPERTY_TEL)) { final Collection<String> typeCollection = paramMap.get(Constants.PARAM_TYPE); - final Object typeObject = VCardUtils.getPhoneTypeFromStrings(typeCollection); + final Object typeObject = + VCardUtils.getPhoneTypeFromStrings(typeCollection, propValue); final int type; final String label; if (typeObject instanceof Integer) { diff --git a/core/java/android/pim/vcard/VCardUtils.java b/core/java/android/pim/vcard/VCardUtils.java index c59e258..8da23a4 100644 --- a/core/java/android/pim/vcard/VCardUtils.java +++ b/core/java/android/pim/vcard/VCardUtils.java @@ -98,7 +98,11 @@ public class VCardUtils { * Returns Interger when the given types can be parsed as known type. Returns String object * when not, which should be set to label. */ - public static Object getPhoneTypeFromStrings(Collection<String> types) { + public static Object getPhoneTypeFromStrings(Collection<String> types, + String number) { + if (number == null) { + number = ""; + } int type = -1; String label = null; boolean isFax = false; @@ -117,7 +121,20 @@ public class VCardUtils { } Integer tmp = sKnownPhoneTypeMap_StoI.get(typeString); if (tmp != null) { - type = tmp; + final int typeCandidate = tmp; + // TYPE_PAGER is prefered when the number contains @ surronded by + // a pager number and a domain name. + // e.g. + // o 1111@domain.com + // x @domain.com + // x 1111@ + final int indexOfAt = number.indexOf("@"); + if ((typeCandidate == Phone.TYPE_PAGER + && 0 < indexOfAt && indexOfAt < number.length() - 1) + || type < 0 + || type == Phone.TYPE_CUSTOM) { + type = tmp; + } } else if (type < 0) { type = Phone.TYPE_CUSTOM; label = typeString; |
