Remove extra alarm constructor

pull/2906/head
Alex Baker 4 months ago
parent 4c245edbb4
commit 5bd0cef42e

@ -40,7 +40,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
) )
) )
) )
alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(0, 0, Alarm.TYPE_REL_END))) alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(type = Alarm.TYPE_REL_END)))
testResults(emptyList(), DateTime(2024, 5, 18, 18, 0).millis) testResults(emptyList(), DateTime(2024, 5, 18, 18, 0).millis)
} }
@ -57,7 +57,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
) )
) )
) )
alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(0, 0, Alarm.TYPE_REL_END))) alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(type = Alarm.TYPE_REL_END)))
testResults( testResults(
listOf( listOf(
@ -87,9 +87,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
1, 1,
mutableSetOf( mutableSetOf(
Alarm( Alarm(
0, type = Alarm.TYPE_REL_END,
0,
Alarm.TYPE_REL_END,
repeat = 1, repeat = 1,
interval = TimeUnit.HOURS.toMillis(6) interval = TimeUnit.HOURS.toMillis(6)
) )
@ -123,8 +121,8 @@ class AlarmJobServiceTest : InjectingTestCase() {
alarmService.synchronizeAlarms( alarmService.synchronizeAlarms(
1, 1,
mutableSetOf( mutableSetOf(
Alarm(0, 0, Alarm.TYPE_REL_END), Alarm(type = Alarm.TYPE_REL_END),
Alarm(0, DateTimeUtils2.currentTimeMillis(), Alarm.TYPE_SNOOZE) Alarm(time = DateTimeUtils2.currentTimeMillis(), type = Alarm.TYPE_SNOOZE)
) )
) )
@ -160,11 +158,10 @@ class AlarmJobServiceTest : InjectingTestCase() {
alarmService.synchronizeAlarms( alarmService.synchronizeAlarms(
1, 1,
mutableSetOf( mutableSetOf(
Alarm(0, 0, Alarm.TYPE_REL_END), Alarm(type = Alarm.TYPE_REL_END),
Alarm( Alarm(
0, time = DateTimeUtils2.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5),
DateTimeUtils2.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5), type = Alarm.TYPE_SNOOZE
Alarm.TYPE_SNOOZE
) )
) )
) )
@ -190,7 +187,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
) )
alarmService.synchronizeAlarms( alarmService.synchronizeAlarms(
1, 1,
mutableSetOf(Alarm(0, 0, Alarm.TYPE_REL_END)) mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
) )
testResults( testResults(
@ -214,7 +211,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
) )
alarmService.synchronizeAlarms( alarmService.synchronizeAlarms(
1, 1,
mutableSetOf(Alarm(0, 0, Alarm.TYPE_REL_END)) mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
) )
testResults( testResults(
@ -238,7 +235,7 @@ class AlarmJobServiceTest : InjectingTestCase() {
) )
alarmService.synchronizeAlarms( alarmService.synchronizeAlarms(
1, 1,
mutableSetOf(Alarm(0, 0, Alarm.TYPE_REL_END)) mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
) )
testResults( testResults(

@ -2,20 +2,23 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.Assert.* import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.SuspendFreeze.Companion.freezeAt import org.tasks.SuspendFreeze.Companion.freezeAt
import org.tasks.caldav.GeoUtils.toLikeString import org.tasks.caldav.GeoUtils.toLikeString
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.entity.Geofence import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
import org.tasks.data.entity.Task
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
@ -122,7 +125,13 @@ class LocationDaoTest : InjectingTestCase() {
val place = Place() val place = Place()
locationDao.insert(place) locationDao.insert(place)
val task = taskDao.createNew(newTask()) val task = taskDao.createNew(newTask())
alarmDao.insert(Alarm(task, newDateTime().plusMinutes(15).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = task,
time = newDateTime().plusMinutes(15).millis,
type = TYPE_SNOOZE
)
)
locationDao.insert(Geofence(task = task, place = place.uid, isArrival = true)) locationDao.insert(Geofence(task = task, place = place.uid, isArrival = true))
assertTrue(locationDao.getArrivalGeofences(place.uid!!, currentTimeMillis()).isEmpty()) assertTrue(locationDao.getArrivalGeofences(place.uid!!, currentTimeMillis()).isEmpty())
@ -135,7 +144,13 @@ class LocationDaoTest : InjectingTestCase() {
val place = Place() val place = Place()
locationDao.insert(place) locationDao.insert(place)
val task = taskDao.createNew(newTask()) val task = taskDao.createNew(newTask())
alarmDao.insert(Alarm(task, newDateTime().plusMinutes(15).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = task,
time = newDateTime().plusMinutes(15).millis,
type = TYPE_SNOOZE
)
)
locationDao.insert(Geofence(task = task, place = place.uid, isDeparture = true)) locationDao.insert(Geofence(task = task, place = place.uid, isDeparture = true))
assertTrue(locationDao.getDepartureGeofences(place.uid!!, currentTimeMillis()).isEmpty()) assertTrue(locationDao.getDepartureGeofences(place.uid!!, currentTimeMillis()).isEmpty())
@ -148,7 +163,13 @@ class LocationDaoTest : InjectingTestCase() {
val place = Place() val place = Place()
locationDao.insert(place) locationDao.insert(place)
val task = taskDao.createNew(newTask()) val task = taskDao.createNew(newTask())
alarmDao.insert(Alarm(task, newDateTime().minusMinutes(15).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = task,
time = newDateTime().minusMinutes(15).millis,
type = TYPE_SNOOZE
)
)
val geofence = Geofence(task = task, place = place.uid, isArrival = true) val geofence = Geofence(task = task, place = place.uid, isArrival = true)
.let { it.copy(id = locationDao.insert(it)) } .let { it.copy(id = locationDao.insert(it)) }
@ -164,7 +185,13 @@ class LocationDaoTest : InjectingTestCase() {
val place = Place() val place = Place()
locationDao.insert(place) locationDao.insert(place)
val task = taskDao.createNew(newTask()) val task = taskDao.createNew(newTask())
alarmDao.insert(Alarm(task, newDateTime().minusMinutes(15).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = task,
time = newDateTime().minusMinutes(15).millis,
type = TYPE_SNOOZE
)
)
val geofence = Geofence(task = task, place = place.uid, isDeparture = true) val geofence = Geofence(task = task, place = place.uid, isDeparture = true)
.let { it.copy(id = locationDao.insert(it)) } .let { it.copy(id = locationDao.insert(it)) }

@ -1,11 +1,13 @@
package org.tasks.opentasks package org.tasks.opentasks
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.Assert.* import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.SuspendFreeze.Companion.freezeAt import org.tasks.SuspendFreeze.Companion.freezeAt
import org.tasks.TestUtilities.withTZ import org.tasks.TestUtilities.withTZ
@ -13,11 +15,12 @@ import org.tasks.caldav.iCalendar.Companion.collapsed
import org.tasks.caldav.iCalendar.Companion.order import org.tasks.caldav.iCalendar.Companion.order
import org.tasks.caldav.iCalendar.Companion.parent import org.tasks.caldav.iCalendar.Companion.parent
import org.tasks.caldav.iCalendar.Companion.snooze import org.tasks.caldav.iCalendar.Companion.snooze
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker import org.tasks.makers.CaldavTaskMaker
import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.CALENDAR
@ -33,7 +36,7 @@ import org.tasks.makers.TaskMaker.COLLAPSED
import org.tasks.makers.TaskMaker.ORDER import org.tasks.makers.TaskMaker.ORDER
import org.tasks.makers.TaskMaker.newTask import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.util.* import java.util.TimeZone
import javax.inject.Inject import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@ -213,7 +216,14 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
?.let { taskDao.fetch(it.task) } ?.let { taskDao.fetch(it.task) }
assertEquals( assertEquals(
listOf(Alarm(task!!.id, 1612972355000, TYPE_SNOOZE).apply { id = 1 }), listOf(
Alarm(
id = 1,
task = task!!.id,
time = 1612972355000,
type = TYPE_SNOOZE
)
),
alarmDao.getAlarms(task.id) alarmDao.getAlarms(task.id)
) )
} }
@ -222,7 +232,13 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
fun pushSnoozeTime() = withTZ(CHICAGO) { fun pushSnoozeTime() = withTZ(CHICAGO) {
val (listId, list) = openTaskDao.insertList() val (listId, list) = openTaskDao.insertList()
val taskId = taskDao.createNew(newTask()) val taskId = taskDao.createNew(newTask())
alarmDao.insert(Alarm(taskId, DateTime(2021, 2, 4, 13, 30).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = taskId,
time = DateTime(2021, 2, 4, 13, 30).millis,
type = TYPE_SNOOZE
)
)
caldavDao.insert(newCaldavTask( caldavDao.insert(newCaldavTask(
with(CALENDAR, list.uuid), with(CALENDAR, list.uuid),
@ -241,7 +257,13 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
fun dontPushLapsedSnoozeTime() = withTZ(CHICAGO) { fun dontPushLapsedSnoozeTime() = withTZ(CHICAGO) {
val (listId, list) = openTaskDao.insertList() val (listId, list) = openTaskDao.insertList()
val taskId = taskDao.createNew(newTask()) val taskId = taskDao.createNew(newTask())
alarmDao.insert(Alarm(taskId, DateTime(2021, 2, 4, 13, 30).millis, TYPE_SNOOZE)) alarmDao.insert(
Alarm(
task = taskId,
time = DateTime(2021, 2, 4, 13, 30).millis,
type = TYPE_SNOOZE
)
)
caldavDao.insert(newCaldavTask( caldavDao.insert(newCaldavTask(
with(CALENDAR, list.uuid), with(CALENDAR, list.uuid),
@ -264,10 +286,11 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
val task = caldavDao.getTaskByRemoteId(list.uuid!!, "4CBBC669-70E3-474D-A0A3-0FC42A14A5A5") val task = caldavDao.getTaskByRemoteId(list.uuid!!, "4CBBC669-70E3-474D-A0A3-0FC42A14A5A5")
?: throw IllegalStateException("Missing task") ?: throw IllegalStateException("Missing task")
val snooze = alarmDao.getSnoozed(listOf(task.task)) assertEquals(
assertEquals(1, snooze.size) listOf(Alarm(1, task.id, DateTime(2021, 2, 10, 9, 52, 35).millis, TYPE_SNOOZE)),
alarmDao.delete(snooze.first()) alarmDao.getAlarms(1)
assertTrue(alarmDao.getSnoozed(listOf(task.task)).isEmpty()) )
alarmDao.deleteSnoozed(listOf(1))
taskDao.touch(task.task) taskDao.touch(task.task)
synchronizer.sync() synchronizer.sync()

@ -1,6 +1,5 @@
package org.tasks.ui.editviewmodel package org.tasks.ui.editviewmodel
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -8,9 +7,10 @@ import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.data.createDueDate
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.whenOverdue import org.tasks.data.entity.Alarm.Companion.whenOverdue
import org.tasks.data.createDueDate import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.newTask import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
@ -34,7 +34,14 @@ class ReminderTests : BaseTaskEditViewModelTest() {
save() save()
assertEquals( assertEquals(
listOf(Alarm(1, 0, Alarm.TYPE_REL_START).apply { id = 1 }), listOf(
Alarm(
id = 1,
task = 1,
time = 0,
type = Alarm.TYPE_REL_START
)
),
alarmDao.getAlarms(task.id) alarmDao.getAlarms(task.id)
) )
} }
@ -55,7 +62,14 @@ class ReminderTests : BaseTaskEditViewModelTest() {
save() save()
assertEquals( assertEquals(
listOf(Alarm(1, 0, Alarm.TYPE_REL_END).apply { id = 1 }), listOf(
Alarm(
id = 1,
task = 1,
time = 0,
type = Alarm.TYPE_REL_END
)
),
alarmDao.getAlarms(task.id) alarmDao.getAlarms(task.id)
) )
} }

@ -68,8 +68,8 @@ class AlarmService @Inject constructor(
suspend fun snooze(time: Long, taskIds: List<Long>) { suspend fun snooze(time: Long, taskIds: List<Long>) {
notificationManager.cancel(taskIds) notificationManager.cancel(taskIds)
alarmDao.getSnoozed(taskIds).let { alarmDao.delete(it) } alarmDao.deleteSnoozed(taskIds)
taskIds.map { Alarm(it, time, TYPE_SNOOZE) }.let { alarmDao.insert(it) } alarmDao.insert(taskIds.map { Alarm(task = it, time = time, type = TYPE_SNOOZE) })
taskDao.touch(taskIds) taskDao.touch(taskIds)
workManager.triggerNotifications() workManager.triggerNotifications()
} }

@ -7,35 +7,35 @@ import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.PermaSql import com.todoroo.astrid.api.PermaSql
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import org.tasks.data.entity.Task.Companion.DUE_DATE
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_NONE
import org.tasks.data.entity.Task.Companion.IMPORTANCE
import com.todoroo.astrid.gcal.GCalHelper import com.todoroo.astrid.gcal.GCalHelper
import org.tasks.data.UUIDHelper
import com.todoroo.astrid.utility.TitleParser.parse import com.todoroo.astrid.utility.TitleParser.parse
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.GoogleTask
import org.tasks.data.UUIDHelper
import org.tasks.data.createDueDate
import org.tasks.data.createGeofence
import org.tasks.data.createHideUntil
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM
import org.tasks.data.entity.Alarm.Companion.whenDue import org.tasks.data.entity.Alarm.Companion.whenDue
import org.tasks.data.entity.Alarm.Companion.whenOverdue import org.tasks.data.entity.Alarm.Companion.whenOverdue
import org.tasks.data.entity.Alarm.Companion.whenStarted import org.tasks.data.entity.Alarm.Companion.whenStarted
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.GoogleTask
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
import org.tasks.data.entity.Tag import org.tasks.data.entity.Tag
import org.tasks.data.dao.TagDao
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.data.dao.TagDataDao import org.tasks.data.entity.Task
import org.tasks.data.createDueDate import org.tasks.data.entity.Task.Companion.DUE_DATE
import org.tasks.data.createGeofence import org.tasks.data.entity.Task.Companion.HIDE_UNTIL
import org.tasks.data.createHideUntil import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_NONE
import org.tasks.data.entity.Task.Companion.IMPORTANCE
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils.startOfDay import org.tasks.time.DateTimeUtils.startOfDay
@ -235,7 +235,7 @@ class TaskCreator @Inject constructor(
} }
} }
if (randomReminder > 0) { if (randomReminder > 0) {
add(Alarm(id, randomReminder, TYPE_RANDOM)) add(Alarm(task = id, time = randomReminder, type = TYPE_RANDOM))
} }
} }
} }

@ -1,23 +1,23 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import org.tasks.data.entity.Task.Companion.NO_ID
import com.todoroo.astrid.gcal.GCalHelper import com.todoroo.astrid.gcal.GCalHelper
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.entity.Alarm
import org.tasks.data.dao.AlarmDao import org.tasks.data.dao.AlarmDao
import org.tasks.data.entity.Attachment
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Geofence
import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.LocationDao import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Tag
import org.tasks.data.dao.TagDao import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.TaskAttachmentDao import org.tasks.data.dao.TaskAttachmentDao
import org.tasks.data.db.DbUtils.dbchunk import org.tasks.data.db.DbUtils.dbchunk
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Attachment
import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Tag
import org.tasks.data.entity.Task
import org.tasks.data.entity.Task.Companion.NO_ID
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject import javax.inject.Inject
@ -96,7 +96,7 @@ class TaskDuplicator @Inject constructor(
} }
val alarms = alarmDao.getAlarms(task.id) val alarms = alarmDao.getAlarms(task.id)
if (alarms.isNotEmpty()) { if (alarms.isNotEmpty()) {
alarmDao.insert(alarms.map { Alarm(clone.id, it.time, it.type) }) alarmDao.insert(alarms.map { Alarm(task = clone.id, time = it.time, type = it.type) })
} }
gcalHelper.createTaskEventIfEnabled(clone) gcalHelper.createTaskEventIfEnabled(clone)
taskDao.save(clone, null) // TODO: delete me taskDao.save(clone, null) // TODO: delete me

@ -31,7 +31,7 @@ import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.MyTimePickerDialog import org.tasks.dialogs.MyTimePickerDialog
import org.tasks.scheduling.NotificationSchedulerIntentService import org.tasks.scheduling.NotificationSchedulerIntentService
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
import java.util.* import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -98,7 +98,7 @@ class ReminderControlSet : TaskEditControlFragment() {
data.getLongExtra(MyTimePickerDialog.EXTRA_TIMESTAMP, 0L) data.getLongExtra(MyTimePickerDialog.EXTRA_TIMESTAMP, 0L)
val replace: Alarm? = data.getParcelableExtra(EXTRA_REPLACE) val replace: Alarm? = data.getParcelableExtra(EXTRA_REPLACE)
replace?.let { viewModel.removeAlarm(it) } replace?.let { viewModel.removeAlarm(it) }
viewModel.addAlarm(Alarm(0, timestamp, TYPE_DATE_TIME)) viewModel.addAlarm(Alarm(time = timestamp, type = TYPE_DATE_TIME))
} }
AlarmRow( AlarmRow(
locale = locale, locale = locale,

@ -67,7 +67,12 @@ internal fun VAlarm.toAlarm(): Alarm? {
else -> else ->
return null return null
} }
return Alarm(0L, time, type, repeat?.count ?: 0, duration?.toMillis() ?: 0) return Alarm(
time = time,
type = type,
repeat = repeat?.count ?: 0,
interval = duration?.toMillis() ?: 0
)
} }
private fun net.fortuna.ical4j.model.property.Duration.toMillis() = duration.toMillis() private fun net.fortuna.ical4j.model.property.Duration.toMillis() = duration.toMillis()

@ -28,27 +28,27 @@ import org.tasks.caldav.GeoUtils.toGeo
import org.tasks.caldav.GeoUtils.toLikeString import org.tasks.caldav.GeoUtils.toLikeString
import org.tasks.caldav.extensions.toAlarms import org.tasks.caldav.extensions.toAlarms
import org.tasks.caldav.extensions.toVAlarms import org.tasks.caldav.extensions.toVAlarms
import org.tasks.data.createDueDate
import org.tasks.data.createGeofence
import org.tasks.data.createHideUntil
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.dao.AlarmDao
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Place import org.tasks.data.entity.Place
import org.tasks.data.dao.TagDao
import org.tasks.data.entity.TagData import org.tasks.data.entity.TagData
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_SPECIFIC_DAY import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_SPECIFIC_DAY
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_SPECIFIC_DAY_TIME import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_SPECIFIC_DAY_TIME
import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY
import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY_TIME import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY_TIME
import org.tasks.data.createDueDate
import org.tasks.data.createGeofence
import org.tasks.data.createHideUntil
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.date.DateTimeUtils.toLocal import org.tasks.date.DateTimeUtils.toLocal
@ -504,7 +504,7 @@ class iCalendar @Inject constructor(
val Task.reminders: List<Alarm> val Task.reminders: List<Alarm>
get() = alarms.filtered.toAlarms().let { alarms -> get() = alarms.filtered.toAlarms().let { alarms ->
snooze?.let { time -> alarms.plus(Alarm(0, time, TYPE_SNOOZE))} ?: alarms snooze?.let { time -> alarms.plus(Alarm(time = time, type = TYPE_SNOOZE))} ?: alarms
} }
internal fun getDateTime(timestamp: Long): DateTime { internal fun getDateTime(timestamp: Long): DateTime {

@ -3,14 +3,31 @@ package org.tasks.compose
import android.content.res.Configuration import android.content.res.Configuration
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.* import androidx.compose.material.AlertDialog
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.RadioButton
import androidx.compose.material.Text
import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Autorenew import androidx.compose.material.icons.outlined.Autorenew
import androidx.compose.runtime.* import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Alignment.Companion.CenterVertically
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
@ -58,7 +75,7 @@ object AddReminderDialog {
confirmButton = { confirmButton = {
Constants.TextButton(text = R.string.ok, onClick = { Constants.TextButton(text = R.string.ok, onClick = {
time.value.takeIf { it > 0 }?.let { i -> time.value.takeIf { it > 0 }?.let { i ->
addAlarm(Alarm(0, i * units.millis, TYPE_RANDOM)) addAlarm(Alarm(time = i * units.millis, type = TYPE_RANDOM))
closeDialog() closeDialog()
} }
}) })
@ -110,7 +127,6 @@ object AddReminderDialog {
time.value.takeIf { it >= 0 }?.let { i -> time.value.takeIf { it >= 0 }?.let { i ->
addAlarm( addAlarm(
Alarm( Alarm(
task = 0,
time = -1 * i * units.millis, time = -1 * i * units.millis,
type = TYPE_REL_END, type = TYPE_REL_END,
repeat = repeat.value, repeat = repeat.value,

@ -168,7 +168,7 @@ class TaskEditViewModel @Inject constructor(
add(Alarm.whenOverdue(0)) add(Alarm.whenOverdue(0))
} }
if (task.randomReminder > 0) { if (task.randomReminder > 0) {
add(Alarm(0, task.randomReminder, Alarm.TYPE_RANDOM)) add(Alarm(time = task.randomReminder, type = Alarm.TYPE_RANDOM))
} }
} }
} else { } else {

@ -2,15 +2,13 @@ package com.todoroo.astrid.alarms
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.andlib.utility.DateUtilities.ONE_WEEK import com.todoroo.andlib.utility.DateUtilities.ONE_WEEK
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_DUE
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_DUE_TIME
import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY_TIME
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.Freeze.Companion.freezeAt import org.tasks.Freeze.Companion.freezeAt
import org.tasks.data.createDueDate
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME
import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM import org.tasks.data.entity.Alarm.Companion.TYPE_RANDOM
@ -20,7 +18,9 @@ import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.entity.Alarm.Companion.whenDue import org.tasks.data.entity.Alarm.Companion.whenDue
import org.tasks.data.entity.Alarm.Companion.whenOverdue import org.tasks.data.entity.Alarm.Companion.whenOverdue
import org.tasks.data.entity.Alarm.Companion.whenStarted import org.tasks.data.entity.Alarm.Companion.whenStarted
import org.tasks.data.createDueDate import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_DUE
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL_DUE_TIME
import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY_TIME
import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.makers.AlarmEntryMaker.TIME import org.tasks.makers.AlarmEntryMaker.TIME
@ -58,7 +58,7 @@ class AlarmCalculatorTest {
assertNull( assertNull(
alarmCalculator.toAlarmEntry( alarmCalculator.toAlarmEntry(
newTask(with(REMINDER_LAST, now)), newTask(with(REMINDER_LAST, now)),
Alarm(0L, now.millis, TYPE_DATE_TIME) Alarm(time = now.millis, type = TYPE_DATE_TIME)
) )
) )
} }
@ -67,7 +67,7 @@ class AlarmCalculatorTest {
fun dateTimeReminder() { fun dateTimeReminder() {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(REMINDER_LAST, now)), newTask(with(REMINDER_LAST, now)),
Alarm(0L, now.millis + 1, TYPE_DATE_TIME) Alarm(time = now.millis + 1, type = TYPE_DATE_TIME)
) )
assertEquals(newAlarmEntry(with(TIME, now.plusMillis(1)), with(TYPE, TYPE_DATE_TIME)), alarm) assertEquals(newAlarmEntry(with(TIME, now.plusMillis(1)), with(TYPE, TYPE_DATE_TIME)), alarm)
@ -77,7 +77,7 @@ class AlarmCalculatorTest {
fun dontIgnoreOldSnooze() { fun dontIgnoreOldSnooze() {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(REMINDER_LAST, now)), newTask(with(REMINDER_LAST, now)),
Alarm(0L, now.millis, TYPE_SNOOZE) Alarm(time = now.millis, type = TYPE_SNOOZE)
) )
assertEquals( assertEquals(
@ -148,7 +148,7 @@ class AlarmCalculatorTest {
freezeAt(DateTime(2023, 11, 3, 17, 13)) { freezeAt(DateTime(2023, 11, 3, 17, 13)) {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_DATE, newDateTime())), newTask(with(DUE_DATE, newDateTime())),
Alarm(0L, DAYS.toMillis(1), TYPE_REL_END) Alarm(time = DAYS.toMillis(1), type = TYPE_REL_END)
) )
assertEquals( assertEquals(
@ -165,7 +165,7 @@ class AlarmCalculatorTest {
fun scheduleRelativeAfterDueTime() = runBlocking { fun scheduleRelativeAfterDueTime() = runBlocking {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_TIME, now)), newTask(with(DUE_TIME, now)),
Alarm(0, DAYS.toMillis(1), TYPE_REL_END) Alarm(time = DAYS.toMillis(1), type = TYPE_REL_END)
) )
assertEquals( assertEquals(
@ -182,7 +182,7 @@ class AlarmCalculatorTest {
freezeAt(DateTime(2023, 11, 3, 17, 13)) { freezeAt(DateTime(2023, 11, 3, 17, 13)) {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_DATE, newDateTime()), with(HIDE_TYPE, HIDE_UNTIL_DUE)), newTask(with(DUE_DATE, newDateTime()), with(HIDE_TYPE, HIDE_UNTIL_DUE)),
Alarm(0, DAYS.toMillis(1), TYPE_REL_START) Alarm(time = DAYS.toMillis(1), type = TYPE_REL_START)
) )
assertEquals( assertEquals(
@ -199,7 +199,7 @@ class AlarmCalculatorTest {
fun scheduleRelativeAfterStartTime() = runBlocking { fun scheduleRelativeAfterStartTime() = runBlocking {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_TIME, now), with(HIDE_TYPE, HIDE_UNTIL_DUE_TIME)), newTask(with(DUE_TIME, now), with(HIDE_TYPE, HIDE_UNTIL_DUE_TIME)),
Alarm(0, DAYS.toMillis(1), TYPE_REL_START) Alarm(time = DAYS.toMillis(1), type = TYPE_REL_START)
) )
assertEquals( assertEquals(
@ -215,7 +215,7 @@ class AlarmCalculatorTest {
fun scheduleFirstRepeatReminder() = runBlocking { fun scheduleFirstRepeatReminder() = runBlocking {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(4))), newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(4))),
Alarm(0, 0, TYPE_REL_END, 1, MINUTES.toMillis(5)) Alarm(type = TYPE_REL_END, repeat = 1, interval = MINUTES.toMillis(5))
) )
assertEquals( assertEquals(
@ -231,7 +231,7 @@ class AlarmCalculatorTest {
fun scheduleSecondRepeatReminder() = runBlocking { fun scheduleSecondRepeatReminder() = runBlocking {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(6))), newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(6))),
Alarm(0, 0, TYPE_REL_END, 2, MINUTES.toMillis(5)) Alarm(type = TYPE_REL_END, repeat = 2, interval = MINUTES.toMillis(5))
) )
assertEquals( assertEquals(
@ -247,7 +247,7 @@ class AlarmCalculatorTest {
fun terminateRepeatReminder() = runBlocking { fun terminateRepeatReminder() = runBlocking {
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(10))), newTask(with(DUE_TIME, now), with(REMINDER_LAST, now.plusMinutes(10))),
Alarm(0L, 0, TYPE_REL_END, 2, MINUTES.toMillis(5)) Alarm(type = TYPE_REL_END, repeat = 2, interval = MINUTES.toMillis(5))
) )
assertNull(alarm) assertNull(alarm)
@ -306,7 +306,7 @@ class AlarmCalculatorTest {
with(REMINDER_LAST, now.minusDays(14)), with(REMINDER_LAST, now.minusDays(14)),
with(CREATION_TIME, now.minusDays(30)), with(CREATION_TIME, now.minusDays(30)),
), ),
Alarm(0L, ONE_WEEK, TYPE_RANDOM) Alarm(time = ONE_WEEK, type = TYPE_RANDOM)
) )
assertEquals( assertEquals(
@ -328,7 +328,7 @@ class AlarmCalculatorTest {
) )
val alarm = alarmCalculator.toAlarmEntry( val alarm = alarmCalculator.toAlarmEntry(
task, task,
Alarm(0L, ONE_WEEK, TYPE_RANDOM) Alarm(time = ONE_WEEK, type = TYPE_RANDOM)
) )
assertEquals( assertEquals(
@ -348,7 +348,7 @@ class AlarmCalculatorTest {
with(REMINDER_LAST, null as DateTime?), with(REMINDER_LAST, null as DateTime?),
with(CREATION_TIME, now.minusDays(1)), with(CREATION_TIME, now.minusDays(1)),
), ),
Alarm(0L, ONE_WEEK, TYPE_RANDOM) Alarm(time = ONE_WEEK, type = TYPE_RANDOM)
) )
assertEquals( assertEquals(
@ -371,7 +371,7 @@ class AlarmCalculatorTest {
with(REMINDER_LAST, now.minusDays(1)), with(REMINDER_LAST, now.minusDays(1)),
with(CREATION_TIME, now.minusDays(30)), with(CREATION_TIME, now.minusDays(30)),
), ),
Alarm(0L, ONE_WEEK, TYPE_RANDOM) Alarm(time = ONE_WEEK, type = TYPE_RANDOM)
) )
assertEquals( assertEquals(

@ -1,6 +1,5 @@
package org.tasks.caldav package org.tasks.caldav
import org.tasks.data.entity.Task
import org.junit.After import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
@ -10,8 +9,9 @@ import org.tasks.TestUtilities.alarms
import org.tasks.TestUtilities.vtodo import org.tasks.TestUtilities.vtodo
import org.tasks.data.entity.Alarm import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME
import org.tasks.data.entity.Task
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.util.* import java.util.TimeZone
class AppleRemindersTests { class AppleRemindersTests {
private val defaultTimeZone = TimeZone.getDefault() private val defaultTimeZone = TimeZone.getDefault()
@ -85,7 +85,7 @@ class AppleRemindersTests {
@Test @Test
fun dateTimeReminder() { fun dateTimeReminder() {
assertEquals( assertEquals(
listOf(Alarm(0, 1642568400000, TYPE_DATE_TIME)), listOf(Alarm(time = 1642568400000, type = TYPE_DATE_TIME)),
"apple/date_time_reminder.txt".alarms "apple/date_time_reminder.txt".alarms
) )
} }

@ -1,6 +1,5 @@
package org.tasks.caldav package org.tasks.caldav
import org.tasks.data.entity.Task
import org.junit.After import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
@ -14,8 +13,9 @@ import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_DATE_TIME 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_END
import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START import org.tasks.data.entity.Alarm.Companion.TYPE_REL_START
import org.tasks.data.entity.Task
import org.tasks.time.DateTime import org.tasks.time.DateTime
import java.util.* import java.util.TimeZone
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeUnit.MINUTES import java.util.concurrent.TimeUnit.MINUTES
@ -113,7 +113,7 @@ class ThunderbirdTests {
@Test @Test
fun dateTimeReminder() { fun dateTimeReminder() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = 1642791600000, type = TYPE_DATE_TIME)), listOf(Alarm(time = 1642791600000, type = TYPE_DATE_TIME)),
"thunderbird/date_time_reminder.txt".alarms "thunderbird/date_time_reminder.txt".alarms
) )
} }
@ -121,7 +121,7 @@ class ThunderbirdTests {
@Test @Test
fun reminderBeforeStart() { fun reminderBeforeStart() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = -TimeUnit.HOURS.toMillis(1), type = TYPE_REL_START)), listOf(Alarm(time = -TimeUnit.HOURS.toMillis(1), type = TYPE_REL_START)),
"thunderbird/reminder_before_start.txt".alarms "thunderbird/reminder_before_start.txt".alarms
) )
} }
@ -129,7 +129,7 @@ class ThunderbirdTests {
@Test @Test
fun reminderAfterStart() { fun reminderAfterStart() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = MINUTES.toMillis(15), type = TYPE_REL_START)), listOf(Alarm(time = MINUTES.toMillis(15), type = TYPE_REL_START)),
"thunderbird/reminder_after_start.txt".alarms "thunderbird/reminder_after_start.txt".alarms
) )
} }
@ -137,7 +137,7 @@ class ThunderbirdTests {
@Test @Test
fun reminderBeforeEnd() { fun reminderBeforeEnd() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = -MINUTES.toMillis(15), type = TYPE_REL_END)), listOf(Alarm(time = -MINUTES.toMillis(15), type = TYPE_REL_END)),
"thunderbird/reminder_before_end.txt".alarms "thunderbird/reminder_before_end.txt".alarms
) )
} }
@ -145,7 +145,7 @@ class ThunderbirdTests {
@Test @Test
fun reminderAfterEnd() { fun reminderAfterEnd() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = MINUTES.toMillis(15), type = TYPE_REL_END)), listOf(Alarm(time = MINUTES.toMillis(15), type = TYPE_REL_END)),
"thunderbird/reminder_after_end.txt".alarms "thunderbird/reminder_after_end.txt".alarms
) )
} }
@ -153,7 +153,7 @@ class ThunderbirdTests {
@Test @Test
fun reminderAtStart() { fun reminderAtStart() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = 0, type = TYPE_REL_START)), listOf(Alarm(type = TYPE_REL_START)),
"thunderbird/reminder_at_start.txt".alarms "thunderbird/reminder_at_start.txt".alarms
) )
} }
@ -161,7 +161,7 @@ class ThunderbirdTests {
@Test @Test
fun reminder50Days() { fun reminder50Days() {
assertEquals( assertEquals(
listOf(Alarm(task = 0, time = -TimeUnit.DAYS.toMillis(50), type = TYPE_REL_START)), listOf(Alarm(time = -TimeUnit.DAYS.toMillis(50), type = TYPE_REL_START)),
"thunderbird/reminder_50_days.txt".alarms "thunderbird/reminder_50_days.txt".alarms
) )
} }

@ -17,11 +17,8 @@ class VAlarmTests {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;VALUE=DATE-TIME:20220121T190000Z\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;VALUE=DATE-TIME:20220121T190000Z\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n",
Alarm( Alarm(
0, time = DateTime(2022, 1, 21, 19, 0, 0, 0, UTC).millis,
DateTime(2022, 1, 21, 19, 0, 0, 0, UTC).millis, type = TYPE_DATE_TIME,
TYPE_DATE_TIME,
0,
0
).toVAlarm().toString() ).toVAlarm().toString()
) )
} }
@ -29,11 +26,8 @@ class VAlarmTests {
@Test @Test
fun dateTimeFromAlarm() { fun dateTimeFromAlarm() {
val alarm = Alarm( val alarm = Alarm(
0, time = DateTime(2022, 1, 21, 19, 0, 0, 0, UTC).millis,
DateTime(2022, 1, 21, 19, 0, 0, 0, UTC).millis, type = TYPE_DATE_TIME,
TYPE_DATE_TIME,
0,
0
) )
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
@ -42,13 +36,13 @@ class VAlarmTests {
fun beforeStartToVAlarm() { fun beforeStartToVAlarm() {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;RELATED=START:-PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;RELATED=START:-PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n",
Alarm(0, -MINUTES.toMillis(75), TYPE_REL_START, 0, 0).toVAlarm().toString() Alarm(time = -MINUTES.toMillis(75), type = TYPE_REL_START).toVAlarm().toString()
) )
} }
@Test @Test
fun beforeStartFromAlarm() { fun beforeStartFromAlarm() {
val alarm = Alarm(0, -MINUTES.toMillis(75), TYPE_REL_START, 0, 0) val alarm = Alarm(time = -MINUTES.toMillis(75), type = TYPE_REL_START)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
@ -56,13 +50,13 @@ class VAlarmTests {
fun afterStartToVAlarm() { fun afterStartToVAlarm() {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;RELATED=START:PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;RELATED=START:PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n",
Alarm(0, MINUTES.toMillis(75), TYPE_REL_START, 0, 0).toVAlarm().toString() Alarm(time = MINUTES.toMillis(75), type = TYPE_REL_START).toVAlarm().toString()
) )
} }
@Test @Test
fun afterStartFromAlarm() { fun afterStartFromAlarm() {
val alarm = Alarm(0, MINUTES.toMillis(75), TYPE_REL_START, 0, 0) val alarm = Alarm(time = MINUTES.toMillis(75), type = TYPE_REL_START)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
@ -70,13 +64,13 @@ class VAlarmTests {
fun beforeEndToVAlarm() { fun beforeEndToVAlarm() {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;RELATED=END:-PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;RELATED=END:-PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n",
Alarm(0, -MINUTES.toMillis(75), TYPE_REL_END, 0, 0).toVAlarm().toString() Alarm(time = -MINUTES.toMillis(75), type = TYPE_REL_END).toVAlarm().toString()
) )
} }
@Test @Test
fun beforeEndFromAlarm() { fun beforeEndFromAlarm() {
val alarm = Alarm(0, -MINUTES.toMillis(75), TYPE_REL_END, 0, 0) val alarm = Alarm(time = -MINUTES.toMillis(75), type = TYPE_REL_END)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
@ -84,13 +78,13 @@ class VAlarmTests {
fun afterEndToVAlarm() { fun afterEndToVAlarm() {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;RELATED=END:PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;RELATED=END:PT1H15M\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nEND:VALARM\r\n",
Alarm(0, MINUTES.toMillis(75), TYPE_REL_END, 0, 0).toVAlarm().toString() Alarm(time = MINUTES.toMillis(75), type = TYPE_REL_END).toVAlarm().toString()
) )
} }
@Test @Test
fun afterEndFromAlarm() { fun afterEndFromAlarm() {
val alarm = Alarm(0, MINUTES.toMillis(75), TYPE_REL_END, 0, 0) val alarm = Alarm(time = MINUTES.toMillis(75), type = TYPE_REL_END)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
@ -98,13 +92,23 @@ class VAlarmTests {
fun repeatingAlarm() { fun repeatingAlarm() {
assertEquals( assertEquals(
"BEGIN:VALARM\r\nTRIGGER;RELATED=START:P1DT8H\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nREPEAT:15\r\nDURATION:PT15M\r\nEND:VALARM\r\n", "BEGIN:VALARM\r\nTRIGGER;RELATED=START:P1DT8H\r\nACTION:DISPLAY\r\nDESCRIPTION:Default Tasks.org description\r\nREPEAT:15\r\nDURATION:PT15M\r\nEND:VALARM\r\n",
Alarm(0, HOURS.toMillis(32), TYPE_REL_START, 15, MINUTES.toMillis(15)).toVAlarm().toString() Alarm(
time = HOURS.toMillis(32),
type = TYPE_REL_START,
repeat = 15,
interval = MINUTES.toMillis(15)
).toVAlarm().toString()
) )
} }
@Test @Test
fun repeatingFromAlarm() { fun repeatingFromAlarm() {
val alarm = Alarm(0, HOURS.toMillis(32), TYPE_REL_START, 15, MINUTES.toMillis(15)) val alarm = Alarm(
time = HOURS.toMillis(32),
type = TYPE_REL_START,
repeat = 15,
interval = MINUTES.toMillis(15)
)
assertEquals(alarm, alarm.toVAlarm()?.toAlarm()) assertEquals(alarm, alarm.toVAlarm()?.toAlarm())
} }
} }

@ -29,13 +29,10 @@ WHERE tasks._id = :taskId
""") """)
suspend fun getActiveAlarms(taskId: Long): List<Alarm> suspend fun getActiveAlarms(taskId: Long): List<Alarm>
@Query("SELECT * FROM alarms WHERE type = $TYPE_SNOOZE AND task IN (:taskIds)")
suspend fun getSnoozed(taskIds: List<Long>): List<Alarm>
@Query("SELECT * FROM alarms WHERE task = :taskId") @Query("SELECT * FROM alarms WHERE task = :taskId")
suspend fun getAlarms(taskId: Long): List<Alarm> suspend fun getAlarms(taskId: Long): List<Alarm>
@Query("DELETE FROM alarms WHERE type = $TYPE_SNOOZE AND task IN(:taskIds)") @Query("DELETE FROM alarms WHERE type = $TYPE_SNOOZE AND task IN (:taskIds)")
suspend fun deleteSnoozed(taskIds: List<Long>) suspend fun deleteSnoozed(taskIds: List<Long>)
@Delete @Delete

@ -4,7 +4,6 @@ import android.os.Parcelable
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.ForeignKey import androidx.room.ForeignKey
import androidx.room.Ignore
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -43,17 +42,6 @@ data class Alarm(
@ColumnInfo(name = "interval", defaultValue = "0") @ColumnInfo(name = "interval", defaultValue = "0")
var interval: Long = 0, var interval: Long = 0,
) : Parcelable { ) : Parcelable {
@Ignore
constructor(task: Long, time: Long, type: Int, repeat: Int = 0, interval: Long = 0): this(
id = 0,
task = task,
time = time,
type = type,
repeat = repeat,
interval = interval
)
fun same(other: Alarm) = fun same(other: Alarm) =
type == other.type && type == other.type &&
time == other.time && time == other.time &&
@ -80,11 +68,17 @@ data class Alarm(
const val TYPE_GEO_ENTER = 5 const val TYPE_GEO_ENTER = 5
const val TYPE_GEO_EXIT = 6 const val TYPE_GEO_EXIT = 6
fun whenStarted(task: Long) = Alarm(task, 0, TYPE_REL_START) fun whenStarted(task: Long) = Alarm(task = task, type = TYPE_REL_START)
fun whenDue(task: Long) = Alarm(task, 0, TYPE_REL_END) fun whenDue(task: Long) = Alarm(task = task, type = TYPE_REL_END)
fun whenOverdue(task: Long) = fun whenOverdue(task: Long) =
Alarm(task, TimeUnit.DAYS.toMillis(1), TYPE_REL_END, 6, TimeUnit.DAYS.toMillis(1)) Alarm(
task = task,
time = TimeUnit.DAYS.toMillis(1),
type = TYPE_REL_END,
repeat = 6,
interval = TimeUnit.DAYS.toMillis(1)
)
} }
} }
Loading…
Cancel
Save