summaryrefslogtreecommitdiffstats
path: root/core/java/android/pim
diff options
context:
space:
mode:
authorDaisuke Miyakawa <dmiyakawa@google.com>2009-11-05 09:43:19 +0900
committerDaisuke Miyakawa <dmiyakawa@google.com>2009-11-05 09:44:42 +0900
commit26ee0ae9de37e50b790a0a7b7bddb1d27d5b1214 (patch)
treefa47f71fc0aaca5db07aa8a151e280a5a087736a /core/java/android/pim
parent0d55daffc31c123dcf83f6db85f8198854ddc564 (diff)
downloadframeworks_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.java31
-rw-r--r--core/java/android/pim/vcard/VCardUtils.java21
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;