Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bitfireAT/vcard4android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicki Hirner <hirner@bitfire.at>2022-09-27 16:16:07 +0300
committerRicki Hirner <hirner@bitfire.at>2022-09-27 16:17:43 +0300
commit581eac4117634bf59eba14b69acb8bb1cce95d2a (patch)
treeb1d56ff2ffda56a836937b77255166635e85d383
parent4c30847ab55eda44b3b0cee2d03a7d597a83c6aa (diff)
Don't send Android's StructuredPostal.FORMATTED_ADDRESS as vCard LABEL anymore8-support-is_read_only-for-data-and-group-rows
- FORMATTED_ADDRESS is only used for displaying the contact on Android; it can't be set by users - generated LABELs that don't have additional information are redundant and regularly confuse other clients and users - the valid case that we receive a LABEL and should retain it is less important that the two cases mentioned above
-rw-r--r--src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilderTest.kt2
-rw-r--r--src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandlerTest.kt2
-rw-r--r--src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilder.kt20
-rw-r--r--src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandler.kt11
4 files changed, 18 insertions, 17 deletions
diff --git a/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilderTest.kt b/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilderTest.kt
index c9d5632..b434c26 100644
--- a/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilderTest.kt
+++ b/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilderTest.kt
@@ -62,7 +62,7 @@ class StructuredPostalBuilderTest {
assertEquals("ZIP", result[0].values[StructuredPostal.POSTCODE])
assertEquals("Country", result[0].values[StructuredPostal.COUNTRY])
- assertEquals("Street 1\n" +
+ assertEquals("Street 1\n" + // European format
"(Corner Street 2)\n" +
"PO Box 123\n" +
"Hood\n" +
diff --git a/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandlerTest.kt b/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandlerTest.kt
index 0dbb278..e63ae78 100644
--- a/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandlerTest.kt
+++ b/src/androidTest/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandlerTest.kt
@@ -45,7 +45,7 @@ class StructuredPostalHandlerTest {
assertArrayEquals(arrayOf("Sampleregion"), contact.addresses[0].property.regions.toTypedArray())
assertArrayEquals(arrayOf("ZIP"), contact.addresses[0].property.postalCodes.toTypedArray())
assertArrayEquals(arrayOf("Samplecountry"), contact.addresses[0].property.countries.toTypedArray())
- assertEquals("Full Formatted Address", contact.addresses[0].property.label)
+ assertNull(contact.addresses[0].property.label)
}
diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilder.kt b/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilder.kt
index 82992fc..c593bce 100644
--- a/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilder.kt
+++ b/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalBuilder.kt
@@ -14,20 +14,6 @@ import java.util.*
/**
* Data row builder for structured addresses.
- *
- * Android requires a formatted address. If the contact data doesn't contain a
- * formatted address, it's built like this:
- *
- * | field | example |
- * |-------------------|------------------------------|
- * | street | Sample Street 123 |
- * | poBox | P/O Box 45 |
- * | extended | Near the park |
- * | postalCode city | 12345 Sampletown |
- * | country (region) | Samplecountry (Sampleregion) |
- *
- * TODO: should be localized (there are many different international formats)
- *
*/
class StructuredPostalBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact)
: DataRowBuilder(Factory.mimeType(), dataRowUri, rawContactId, contact) {
@@ -37,6 +23,12 @@ class StructuredPostalBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Con
for (labeledAddress in contact.addresses) {
val address = labeledAddress.property
+ /* Generate the formatted address (the one contacts app show in the preview) in European format.
+ *
+ * If we wouldn't do that, the content provider would format it US-EN or JP style:
+ * https://android.googlesource.com/platform/packages/providers/ContactsProvider.git/+/refs/heads/android13-release/src/com/android/providers/contacts/PostalSplitter.java#84
+ *
+ * Could be localized here (but it's still only for viewing the contact on Android and won't be put into a vCard). */
var formattedAddress = address.label
if (formattedAddress.isNullOrBlank()) {
val lines = LinkedList<String>()
diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandler.kt b/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandler.kt
index 2dc0eda..9e9341a 100644
--- a/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandler.kt
+++ b/src/main/java/at/bitfire/vcard4android/contactrow/StructuredPostalHandler.kt
@@ -21,7 +21,16 @@ object StructuredPostalHandler: DataRowHandler() {
val address = Address()
val labeledAddress = LabeledProperty(address)
- address.label = values.getAsString(StructuredPostal.FORMATTED_ADDRESS)
+ /* Sep 2022: We don't set the vCard LABEL anymore. Reasons:
+ *
+ * 1. It can't be entered by the user anyway because no contacts app has a separate field for "formatted address"
+ * [https://www.davx5.com/faq/entering-structured-addresses], which is only used as read-only field to display an address.
+ * 2. It confuses other CalDAV user agents which don't support LABEL (the majority). When such a client receives
+ * and retains the LABEL although the structured address is changed, there are two inconsistent addresses.
+ * [https://github.com/nextcloud/contacts/issues/1900]
+ */
+ //address.label = values.getAsString(StructuredPostal.FORMATTED_ADDRESS)
+
when (values.getAsInteger(StructuredPostal.TYPE)) {
StructuredPostal.TYPE_HOME ->
address.types += AddressType.HOME