diff --git a/app/src/main/java/org/tasks/data/MyAndroidTask.kt b/app/src/main/java/org/tasks/data/MyAndroidTask.kt index f1cfcd2e5..1c0f80ccd 100644 --- a/app/src/main/java/org/tasks/data/MyAndroidTask.kt +++ b/app/src/main/java/org/tasks/data/MyAndroidTask.kt @@ -3,15 +3,14 @@ package org.tasks.data import android.content.ContentUris import android.database.Cursor import android.net.Uri -import at.bitfire.ical4android.AndroidTask import at.bitfire.ical4android.BatchOperation import at.bitfire.ical4android.BatchOperation.CpoBuilder.Companion.newInsert import at.bitfire.ical4android.BatchOperation.CpoBuilder.Companion.newUpdate +import at.bitfire.ical4android.DmfsTask import at.bitfire.ical4android.ICalendar -import at.bitfire.ical4android.Ical4Android import at.bitfire.ical4android.Task import at.bitfire.ical4android.UnknownProperty -import at.bitfire.ical4android.util.MiscUtils.CursorHelper.toValues +import at.bitfire.ical4android.util.MiscUtils.toValues import net.fortuna.ical4j.model.Parameter import net.fortuna.ical4j.model.parameter.RelType import net.fortuna.ical4j.model.parameter.Related @@ -21,7 +20,7 @@ import org.tasks.data.OpenTaskDao.Companion.getLong import java.util.Locale import java.util.logging.Level -class MyAndroidTask() : AndroidTask(null) { +class MyAndroidTask() : DmfsTask(null) { constructor(cursor: Cursor) : this() { val values = cursor.toValues() @@ -99,7 +98,7 @@ class MyAndroidTask() : AndroidTask(null) { .withValue(TaskContract.Property.Alarm.MESSAGE, alarm.description?.value ?: alarm.summary) .withValue(TaskContract.Property.Alarm.ALARM_TYPE, alarmType) - Ical4Android.log.log(Level.FINE, "Inserting alarm", builder.build()) + logger.log(Level.FINE, "Inserting alarm", builder.build()) batch.add(builder) } } @@ -110,7 +109,7 @@ class MyAndroidTask() : AndroidTask(null) { .withTaskId(TaskContract.Property.Category.TASK_ID, idxTask) .withValue(TaskContract.Property.Category.MIMETYPE, TaskContract.Property.Category.CONTENT_ITEM_TYPE) .withValue(TaskContract.Property.Category.CATEGORY_NAME, category) - Ical4Android.log.log(Level.FINE, "Inserting category", builder.build()) + logger.log(Level.FINE, "Inserting category", builder.build()) batch.add(builder) } } @@ -130,7 +129,7 @@ class MyAndroidTask() : AndroidTask(null) { .withValue(TaskContract.Property.Relation.MIMETYPE, TaskContract.Property.Relation.CONTENT_ITEM_TYPE) .withValue(TaskContract.Property.Relation.RELATED_UID, relatedTo.value) .withValue(TaskContract.Property.Relation.RELATED_TYPE, relType) - Ical4Android.log.log(Level.FINE, "Inserting relation", builder.build()) + logger.log(Level.FINE, "Inserting relation", builder.build()) batch.add(builder) } } @@ -138,7 +137,7 @@ class MyAndroidTask() : AndroidTask(null) { private fun insertUnknownProperties(batch: MutableList, idxTask: Int?, uri: Uri) { for (property in requireNotNull(task).unknownProperties) { if (property.value.length > UnknownProperty.MAX_UNKNOWN_PROPERTY_SIZE) { - Ical4Android.log.warning("Ignoring unknown property with ${property.value.length} octets (too long)") + logger.warning("Ignoring unknown property with ${property.value.length} octets (too long)") return } @@ -146,8 +145,8 @@ class MyAndroidTask() : AndroidTask(null) { .withTaskId(TaskContract.Properties.TASK_ID, idxTask) .withValue(TaskContract.Properties.MIMETYPE, UnknownProperty.CONTENT_ITEM_TYPE) .withValue(UNKNOWN_PROPERTY_DATA, UnknownProperty.toJsonString(property)) - Ical4Android.log.log(Level.FINE, "Inserting unknown property", builder.build()) + logger.log(Level.FINE, "Inserting unknown property", builder.build()) batch.add(builder) } } -} \ No newline at end of file +} diff --git a/app/src/test/java/org/tasks/caldav/extensions/VAlarmTests.kt b/app/src/test/java/org/tasks/caldav/extensions/VAlarmTests.kt index 38d1f54f5..ba9991205 100644 --- a/app/src/test/java/org/tasks/caldav/extensions/VAlarmTests.kt +++ b/app/src/test/java/org/tasks/caldav/extensions/VAlarmTests.kt @@ -1,13 +1,19 @@ package org.tasks.caldav.extensions +import at.bitfire.ical4android.Task.Companion.tasksFromReader import org.junit.Assert.assertEquals import org.junit.Test +import org.tasks.caldav.iCalendar.Companion.applyLocal +import org.tasks.data.createDueDate import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME import org.tasks.data.entity.Alarm.Companion.TYPE_REL_END import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START +import org.tasks.data.entity.CaldavTask +import org.tasks.data.entity.Task import org.tasks.time.DateTime import org.tasks.time.DateTime.Companion.UTC +import java.io.ByteArrayInputStream import java.util.concurrent.TimeUnit.HOURS import java.util.concurrent.TimeUnit.MINUTES @@ -111,4 +117,34 @@ class VAlarmTests { ) assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) } -} \ No newline at end of file + + @Test + fun serializeAlarms() { + val remoteTask = at.bitfire.ical4android.Task() + remoteTask.applyLocal( + CaldavTask( + calendar = "", + ), + Task( + dueDate = createDueDate( + Task.URGENCY_SPECIFIC_DAY_TIME, + DateTime(2025, 9, 4, 18, 0, 0).millis + ), + ), + ) + Alarm(time = 0, type = TYPE_REL_END).toVAlarm()?.let { remoteTask.alarms.add(it) } + + val os = java.io.ByteArrayOutputStream() + remoteTask.write(os) + + val tasks = tasksFromReader(ByteArrayInputStream(os.toByteArray()).reader()) + assertEquals(1, tasks.size) + + val task = tasks.first() + assertEquals(1, task.alarms.size) + + val alarm = task.alarms.first().toAlarm() + assertEquals(TYPE_REL_END, alarm?.type) + assertEquals(0L, alarm?.time) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b010445b..f24974d68 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ google-services = "4.4.3" grpc = "1.73.0" hilt = "1.2.0" horologist = "0.7.15" -ical4android = "2fe63dd" +ical4android = "fcb0311ca7" jchronic = "0.2.6" jems = "1.33" junit-junit = "4.13.2"