Merge "Bluetooth sync adr-type "other" between two devices" am: 951d25877c am: d68e116adf am: a4f56d6bf7
Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/vcard/+/1888976
Change-Id: I5ed7c70c6859cae85bb179f3adf3b7c2d907b057
diff --git a/java/com/android/vcard/VCardBuilder.java b/java/com/android/vcard/VCardBuilder.java
index d273347..c938d04 100644
--- a/java/com/android/vcard/VCardBuilder.java
+++ b/java/com/android/vcard/VCardBuilder.java
@@ -1489,6 +1489,10 @@
break;
}
case StructuredPostal.TYPE_OTHER: {
+ // {@code TYPE_OTHER} will be treated as a "custom type" in that a "X-" will be
+ // similarly prepended. According to RFC 2426, this constitutes a valid "x-name",
+ // which constitutes a valid "adr-type".
+ parameterList.add("X-" + VCardConstants.PARAM_ADR_EXTRA_TYPE_OTHER);
break;
}
default: {
diff --git a/java/com/android/vcard/VCardConstants.java b/java/com/android/vcard/VCardConstants.java
index 67c07b7..ed0c34e 100644
--- a/java/com/android/vcard/VCardConstants.java
+++ b/java/com/android/vcard/VCardConstants.java
@@ -153,6 +153,8 @@
public static final String PARAM_ADR_TYPE_PARCEL = "PARCEL";
public static final String PARAM_ADR_TYPE_DOM = "DOM";
public static final String PARAM_ADR_TYPE_INTL = "INTL";
+ // {@link VCardBuilder} translates this type to "X-OTHER".
+ public static final String PARAM_ADR_EXTRA_TYPE_OTHER = "OTHER";
public static final String PARAM_LANGUAGE = "LANGUAGE";
diff --git a/java/com/android/vcard/VCardEntry.java b/java/com/android/vcard/VCardEntry.java
index ee60578..8054bb7 100644
--- a/java/com/android/vcard/VCardEntry.java
+++ b/java/com/android/vcard/VCardEntry.java
@@ -2223,6 +2223,13 @@
} else {
label = typeStringOrg;
}
+ // {@link ContactsContract} has a {@link StructuredPostal.TYPE_OTHER}, so
+ // if the custom type is "other", map it from {@code TYPE_CUSTOM} to
+ // {@code TYPE_OTHER}.
+ if (VCardConstants.PARAM_ADR_EXTRA_TYPE_OTHER.equals(label.toUpperCase())) {
+ type = StructuredPostal.TYPE_OTHER;
+ label = null;
+ }
}
}
}
diff --git a/tests/res/raw/v30_adr_types.vcf b/tests/res/raw/v30_adr_types.vcf
new file mode 100644
index 0000000..55dd1b4
--- /dev/null
+++ b/tests/res/raw/v30_adr_types.vcf
@@ -0,0 +1,8 @@
+BEGIN:VCARD
+VERSION:3.0
+N:Familyname;Givenname;;;
+FN:Givenname Familyname
+ADR;TYPE=WORK:;;1010 Technology Pkwy\, Silicon City\, Somecountry;;;;
+ADR;TYPE=X-Other:;;123 Main St\, Anytown\, Anywhere;;;;
+ADR;TYPE=X-School:;;112358 Academic Lane\, College Town\, Someplace Great;;;;
+END:VCARD
diff --git a/tests/src/com/android/vcard/tests/VCardExporterTests.java b/tests/src/com/android/vcard/tests/VCardExporterTests.java
index 178495f..910e3f7 100644
--- a/tests/src/com/android/vcard/tests/VCardExporterTests.java
+++ b/tests/src/com/android/vcard/tests/VCardExporterTests.java
@@ -17,6 +17,7 @@
package com.android.vcard.tests;
import com.android.vcard.VCardConfig;
+import com.android.vcard.VCardConstants;
import com.android.vcard.tests.testutils.ContactEntry;
import com.android.vcard.tests.testutils.PropertyNodesVerifierElem;
import com.android.vcard.tests.testutils.PropertyNodesVerifierElem.TypeSet;
@@ -885,6 +886,45 @@
testPostalWithBothStructuredAndFormattedCommon(V40);
}
+ private void testPostalAddressTypeHandlingCommon(int vcardType) {
+ mVerifier.initForExportTest(vcardType);
+
+ ContactEntry entry = mVerifier.addInputEntry();
+ entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.STREET, "1010 Technology Pkwy")
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
+ entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.STREET, "123 Main St")
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER);
+ entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.STREET, "112358 Academic Lane")
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
+ .put(StructuredPostal.LABEL, "School");
+
+ PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
+ elem.addExpectedNode("ADR",
+ Arrays.asList("", "", "1010 Technology Pkwy", "", "", "", ""),
+ new TypeSet(VCardConstants.PARAM_TYPE_WORK));
+ elem.addExpectedNode("ADR",
+ Arrays.asList("", "", "123 Main St", "", "", "", ""),
+ new TypeSet("X-" + VCardConstants.PARAM_ADR_EXTRA_TYPE_OTHER));
+ elem.addExpectedNode("ADR",
+ Arrays.asList("", "", "112358 Academic Lane", "", "", "", ""),
+ new TypeSet("X-School"));
+ }
+
+ public void testPostalAddressTypeHandlingV21() {
+ testPostalAddressTypeHandlingCommon(V21);
+ }
+
+ public void testPostalAddressTypeHandlingV30() {
+ testPostalAddressTypeHandlingCommon(V30);
+ }
+
+ public void testPostalAddressTypeHandlingV40() {
+ testPostalAddressTypeHandlingCommon(V40);
+ }
+
private void testOrganizationCommon(int vcardType) {
mVerifier.initForExportTest(vcardType);
ContactEntry entry = mVerifier.addInputEntry();
diff --git a/tests/src/com/android/vcard/tests/VCardImporterTests.java b/tests/src/com/android/vcard/tests/VCardImporterTests.java
index 7b4e669..b4713d0 100644
--- a/tests/src/com/android/vcard/tests/VCardImporterTests.java
+++ b/tests/src/com/android/vcard/tests/VCardImporterTests.java
@@ -555,6 +555,34 @@
testComplicatedCase_Parsing(V21, R.raw.v21_complicated);
}
+ public void testV30adr_types_various() {
+ mVerifier.initForImportTest(V30, R.raw.v30_adr_types);
+ ContentValuesVerifierElem elem = mVerifier.addContentValuesVerifierElem();
+ elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
+ .put(StructuredName.FAMILY_NAME, "Familyname")
+ .put(StructuredName.GIVEN_NAME, "Givenname")
+ .put(StructuredName.DISPLAY_NAME, "Givenname Familyname");
+ elem.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
+ .put(StructuredPostal.STREET,
+ "1010 Technology Pkwy, Silicon City, Somecountry")
+ .put(StructuredPostal.FORMATTED_ADDRESS,
+ "1010 Technology Pkwy, Silicon City, Somecountry");
+ elem.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER)
+ .put(StructuredPostal.STREET,
+ "123 Main St, Anytown, Anywhere")
+ .put(StructuredPostal.FORMATTED_ADDRESS,
+ "123 Main St, Anytown, Anywhere");
+ elem.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
+ .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
+ .put(StructuredPostal.LABEL, "School")
+ .put(StructuredPostal.STREET,
+ "112358 Academic Lane, College Town, Someplace Great")
+ .put(StructuredPostal.FORMATTED_ADDRESS,
+ "112358 Academic Lane, College Town, Someplace Great");
+ }
+
public void testV30ComplicatedCase_Parsing() {
testComplicatedCase_Parsing(V30, R.raw.v30_complicated);
}
diff --git a/tests/src/com/android/vcard/tests/VCardJapanizationTests.java b/tests/src/com/android/vcard/tests/VCardJapanizationTests.java
index 19f70df..5921e31 100644
--- a/tests/src/com/android/vcard/tests/VCardJapanizationTests.java
+++ b/tests/src/com/android/vcard/tests/VCardJapanizationTests.java
@@ -23,6 +23,7 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import com.android.vcard.VCardConfig;
+import com.android.vcard.VCardConstants;
import com.android.vcard.tests.testutils.ContactEntry;
import com.android.vcard.tests.testutils.ContentValuesBuilder;
import com.android.vcard.tests.testutils.PropertyNodesVerifierElem;
@@ -325,7 +326,9 @@
.addExpectedNode("X-REDUCTION", "")
.addExpectedNode("X-NO", "")
.addExpectedNode("X-DCM-HMN-MODE", "")
- .addExpectedNode("ADR", Arrays.asList("2", "", "", "", "", "", ""));
+ .addExpectedNode("ADR",
+ Arrays.asList("2", "", "", "", "", "", ""),
+ new TypeSet("X-" + VCardConstants.PARAM_ADR_EXTRA_TYPE_OTHER));
}
/**