Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 76e30b7e authored by Ricki Hirner's avatar Ricki Hirner Committed by GitHub
Browse files

Ignore RDATEs when there's an also an infinite RRULE to avoid calendar provider exception (#114)



* Ignore RDATEs when there's an also an infinite RRULE to avoid calendar provider exception

* Added test

Signed-off-by: default avatarArnau Mora <arnyminerz@proton.me>

* Tighten test intention

* Remove unused import directive

---------

Signed-off-by: default avatarArnau Mora <arnyminerz@proton.me>
Co-authored-by: default avatarArnau Mora <arnyminerz@proton.me>
Co-authored-by: default avatarSunik Kupfer <kupfer@bitfire.at>
parent dd0ac1fc
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -264,6 +264,21 @@ class AndroidEventTest {
        assertEquals("${tzShanghai.id};20200601T123000,20200701T183000,20200702T183000,20200801T123000,20200802T123000", values.getAsString(Events.RDATE))
    }

    @Test
    fun testBuildEvent_NonAllDay_DtEnd_NoDuration_Recurring_InfiniteRruleAndRdate() {
        val values = buildEvent(false) {
            dtStart = DtStart("20200601T123000", tzShanghai)
            dtEnd = DtEnd("20200601T123000", tzVienna)
            rRules += RRule(
                Recur("FREQ=DAILY;INTERVAL=2")
            )
            rDates += RDate(DateList("20200701T123000,20200702T123000", Value.DATE_TIME, tzVienna))
        }

        assertNull(values.get(Events.RDATE))
        assertEquals("FREQ=DAILY;INTERVAL=2", values.get(Events.RRULE))
    }

    @Test
    fun testBuildEvent_NonAllDay_DtEnd_Duration_NonRecurring() {
        val values = buildEvent(false) {
+17 −7
Original line number Diff line number Diff line
@@ -791,6 +791,15 @@ abstract class AndroidEvent(
                builder.withValue(Events.RRULE, null)

            if (event.rDates.isNotEmpty()) {
                // ignore RDATEs when there's also an infinite RRULE [https://issuetracker.google.com/issues/216374004]
                val infiniteRrule = event.rRules.any { rRule ->
                    rRule.recur.count == -1 &&  // no COUNT AND
                    rRule.recur.until == null   // no UNTIL
                }

                if (infiniteRrule)
                    Ical4Android.log.warning("Android can't handle infinite RRULE + RDATE [https://issuetracker.google.com/issues/216374004]; ignoring RDATE(s)")
                else {
                    for (rDate in event.rDates)
                        AndroidTimeUtils.androidifyTimeZone(rDate)

@@ -800,6 +809,7 @@ abstract class AndroidEvent(
                    event.rDates.addFirst(RDate(listWithDtStart))

                    builder.withValue(Events.RDATE, AndroidTimeUtils.recurrenceSetsToAndroidString(event.rDates, allDay))
                }
            } else
                builder.withValue(Events.RDATE, null)