Loading lib/build.gradle.kts +1 −1 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ dependencies { implementation("org.apache.commons:commons-text:1.3") // ez-vcard to parse/generate vCards api("com.googlecode.ez-vcard:ez-vcard:0.12.0") { // requires Java 8 api("com.googlecode.ez-vcard:ez-vcard:0.12.1") { // requires Java 8 // hCard functionality not needed exclude(group = "org.jsoup") exclude(group = "org.freemarker") Loading lib/src/androidTest/java/at/bitfire/vcard4android/contactrow/EventBuilderTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ import org.junit.Test import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneOffset import java.time.ZonedDateTime class EventBuilderTest { Loading Loading @@ -62,6 +64,17 @@ class EventBuilderTest { } } @Test fun testStartDate_DateTime_WithOffset() { EventBuilder(Uri.EMPTY, null, Contact().apply { birthDay = Birthday( ZonedDateTime.of(1984, 7, 20, 0, 0, 0, 0, ZoneOffset.ofHours(1)) ) }, false).build().also { result -> assertEquals("1984-07-19T23:00:00.000Z", result[0].values[CommonDataKinds.Event.START_DATE]) } } @Test fun testStartDate_PartialDate_NoYear() { Loading lib/src/main/java/at/bitfire/vcard4android/ContactReader.kt +3 −6 Original line number Diff line number Diff line Loading @@ -125,13 +125,10 @@ class ContactReader internal constructor(val vCard: VCard, val downloader: Conta is Uid -> c.uid = uriToUid(prop.value) is Kind -> { // includes XAddressBookServerKind // c.group = prop.isGroup // https://github.com/mangstadt/ez-vcard/issues/140 c.group = prop.value.equals(Kind.GROUP, true) } is Member -> { // includes XAddressBookServerMember is Kind -> // includes XAddressBookServerKind c.group = prop.isGroup is Member -> // includes XAddressBookServerMember uriToUid(prop.uri)?.let { c.members += it } } is FormattedName -> c.displayName = StringUtils.trimToNull(prop.value) Loading lib/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt +7 −8 Original line number Diff line number Diff line Loading @@ -11,12 +11,7 @@ import at.bitfire.vcard4android.Constants import at.bitfire.vcard4android.Contact import ezvcard.property.DateOrTimeProperty import ezvcard.util.PartialDate import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.ZoneOffset import java.time.ZonedDateTime import java.time.* import java.time.format.DateTimeFormatter import java.util.LinkedList import java.util.Locale Loading Loading @@ -62,8 +57,7 @@ class EventBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact, readO val androidStr: String? = when { dateOrTime.date != null -> { val date = dateOrTime.date when (date) { when (val date = dateOrTime.date) { is Instant -> { val utc = ZonedDateTime.ofInstant(date, ZoneOffset.UTC) DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(utc) Loading @@ -72,6 +66,11 @@ class EventBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact, readO DateTimeFormatter.ofPattern(FULL_DATE_FORMAT, Locale.US).format(date) is LocalDateTime -> DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(date) is ZonedDateTime -> { // time zones not supported by Contacts storage, convert to UTC val utc = date.withZoneSameInstant(ZoneOffset.UTC) DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(utc) } else -> null } Loading lib/src/test/java/at/bitfire/vcard4android/ContactWriterTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -563,7 +563,7 @@ class ContactWriterTest { val stream = ByteArrayOutputStream() generator.writeCard(stream, true) assertEquals("[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"prodid\",{},\"text\",\"ez-vcard 0.12.0\"],[\"fn\",{},\"text\",\"\"],[\"rev\",{},\"timestamp\",\"2021-07-30T01:02:03+00:00\"]]]", stream.toString()) assertEquals("[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"prodid\",{},\"text\",\"ez-vcard 0.12.1\"],[\"fn\",{},\"text\",\"\"],[\"rev\",{},\"timestamp\",\"2021-07-30T01:02:03+00:00\"]]]", stream.toString()) } Loading @@ -576,7 +576,7 @@ class ContactWriterTest { generator.writeCard(stream, false) assertEquals("BEGIN:VCARD\r\n" + "VERSION:4.0\r\n" + "PRODID:ez-vcard 0.12.0\r\n" + "PRODID:ez-vcard 0.12.1\r\n" + "FN:\r\n" + "REV:20210730T010203+0000\r\n" + "END:VCARD\r\n", stream.toString()) Loading Loading
lib/build.gradle.kts +1 −1 Original line number Diff line number Diff line Loading @@ -116,7 +116,7 @@ dependencies { implementation("org.apache.commons:commons-text:1.3") // ez-vcard to parse/generate vCards api("com.googlecode.ez-vcard:ez-vcard:0.12.0") { // requires Java 8 api("com.googlecode.ez-vcard:ez-vcard:0.12.1") { // requires Java 8 // hCard functionality not needed exclude(group = "org.jsoup") exclude(group = "org.freemarker") Loading
lib/src/androidTest/java/at/bitfire/vcard4android/contactrow/EventBuilderTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ import org.junit.Test import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneOffset import java.time.ZonedDateTime class EventBuilderTest { Loading Loading @@ -62,6 +64,17 @@ class EventBuilderTest { } } @Test fun testStartDate_DateTime_WithOffset() { EventBuilder(Uri.EMPTY, null, Contact().apply { birthDay = Birthday( ZonedDateTime.of(1984, 7, 20, 0, 0, 0, 0, ZoneOffset.ofHours(1)) ) }, false).build().also { result -> assertEquals("1984-07-19T23:00:00.000Z", result[0].values[CommonDataKinds.Event.START_DATE]) } } @Test fun testStartDate_PartialDate_NoYear() { Loading
lib/src/main/java/at/bitfire/vcard4android/ContactReader.kt +3 −6 Original line number Diff line number Diff line Loading @@ -125,13 +125,10 @@ class ContactReader internal constructor(val vCard: VCard, val downloader: Conta is Uid -> c.uid = uriToUid(prop.value) is Kind -> { // includes XAddressBookServerKind // c.group = prop.isGroup // https://github.com/mangstadt/ez-vcard/issues/140 c.group = prop.value.equals(Kind.GROUP, true) } is Member -> { // includes XAddressBookServerMember is Kind -> // includes XAddressBookServerKind c.group = prop.isGroup is Member -> // includes XAddressBookServerMember uriToUid(prop.uri)?.let { c.members += it } } is FormattedName -> c.displayName = StringUtils.trimToNull(prop.value) Loading
lib/src/main/java/at/bitfire/vcard4android/contactrow/EventBuilder.kt +7 −8 Original line number Diff line number Diff line Loading @@ -11,12 +11,7 @@ import at.bitfire.vcard4android.Constants import at.bitfire.vcard4android.Contact import ezvcard.property.DateOrTimeProperty import ezvcard.util.PartialDate import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.ZoneOffset import java.time.ZonedDateTime import java.time.* import java.time.format.DateTimeFormatter import java.util.LinkedList import java.util.Locale Loading Loading @@ -62,8 +57,7 @@ class EventBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact, readO val androidStr: String? = when { dateOrTime.date != null -> { val date = dateOrTime.date when (date) { when (val date = dateOrTime.date) { is Instant -> { val utc = ZonedDateTime.ofInstant(date, ZoneOffset.UTC) DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(utc) Loading @@ -72,6 +66,11 @@ class EventBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact, readO DateTimeFormatter.ofPattern(FULL_DATE_FORMAT, Locale.US).format(date) is LocalDateTime -> DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(date) is ZonedDateTime -> { // time zones not supported by Contacts storage, convert to UTC val utc = date.withZoneSameInstant(ZoneOffset.UTC) DateTimeFormatter.ofPattern(DATE_AND_TIME_FORMAT, Locale.US).format(utc) } else -> null } Loading
lib/src/test/java/at/bitfire/vcard4android/ContactWriterTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -563,7 +563,7 @@ class ContactWriterTest { val stream = ByteArrayOutputStream() generator.writeCard(stream, true) assertEquals("[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"prodid\",{},\"text\",\"ez-vcard 0.12.0\"],[\"fn\",{},\"text\",\"\"],[\"rev\",{},\"timestamp\",\"2021-07-30T01:02:03+00:00\"]]]", stream.toString()) assertEquals("[\"vcard\",[[\"version\",{},\"text\",\"4.0\"],[\"prodid\",{},\"text\",\"ez-vcard 0.12.1\"],[\"fn\",{},\"text\",\"\"],[\"rev\",{},\"timestamp\",\"2021-07-30T01:02:03+00:00\"]]]", stream.toString()) } Loading @@ -576,7 +576,7 @@ class ContactWriterTest { generator.writeCard(stream, false) assertEquals("BEGIN:VCARD\r\n" + "VERSION:4.0\r\n" + "PRODID:ez-vcard 0.12.0\r\n" + "PRODID:ez-vcard 0.12.1\r\n" + "FN:\r\n" + "REV:20210730T010203+0000\r\n" + "END:VCARD\r\n", stream.toString()) Loading