From 3b6d355890ca8c91418645f2cab6e9ed3a4a6387 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 7 May 2020 13:10:14 -0500 Subject: [PATCH] Convert Task to Kotlin --- .../astrid/alarms/AlarmJobServiceTest.kt | 4 +- .../com/todoroo/astrid/dao/TaskDaoTests.kt | 40 +- .../java/com/todoroo/astrid/data/TaskTest.kt | 18 +- .../gtasks/GtasksMetadataServiceTest.kt | 10 +- .../java/com/todoroo/astrid/model/TaskTest.kt | 2 +- .../astrid/reminders/ReminderServiceTest.kt | 8 +- .../astrid/repeats/AdvancedRepeatTest.kt | 8 +- .../todoroo/astrid/repeats/NewRepeatTests.kt | 20 +- .../astrid/repeats/RepeatTaskHelperTest.kt | 2 +- .../astrid/service/QuickAddMarkupTest.kt | 6 +- .../todoroo/astrid/service/TaskMoverTest.kt | 22 +- .../todoroo/astrid/service/TitleParserTest.kt | 88 +- .../astrid/subtasks/SubtasksHelperTest.kt | 2 +- .../astrid/subtasks/SubtasksMovingTest.kt | 2 +- .../astrid/subtasks/SubtasksTestCase.kt | 2 +- .../todoroo/astrid/sync/NewSyncTestCase.kt | 4 +- .../org/tasks/caldav/AppleRemindersTests.kt | 16 +- .../java/org/tasks/caldav/NextCloudTests.kt | 26 +- .../java/org/tasks/caldav/ThunderbirdTests.kt | 22 +- .../java/org/tasks/data/CaldavDaoTests.kt | 6 +- .../java/org/tasks/data/DeletionDaoTests.kt | 16 +- .../java/org/tasks/data/GoogleTaskDaoTests.kt | 2 +- .../java/org/tasks/data/TagDataDaoTest.kt | 2 +- .../gtasks/GoogleTaskSynchronizerTest.kt | 32 +- .../java/org/tasks/jobs/BackupServiceTests.kt | 2 +- .../java/org/tasks/makers/TagMaker.kt | 4 +- .../java/org/tasks/makers/TaskMaker.kt | 14 +- .../java/com/todoroo/astrid/dao/TaskDao.kt | 11 +- .../java/com/todoroo/astrid/data/Task.java | 918 ------------------ .../main/java/com/todoroo/astrid/data/Task.kt | 618 ++++++++++++ .../com/todoroo/astrid/service/TaskMover.java | 2 +- .../main/java/org/tasks/caldav/iCalendar.kt | 10 +- app/src/main/java/org/tasks/data/Tag.kt | 2 +- app/src/main/java/org/tasks/data/TagDao.kt | 2 +- .../main/java/org/tasks/data/TagDataDao.kt | 6 +- .../java/org/tasks/dialogs/DateTimePicker.kt | 2 +- .../java/org/tasks/ui/CheckBoxProvider.kt | 4 +- 37 files changed, 828 insertions(+), 1127 deletions(-) delete mode 100644 app/src/main/java/com/todoroo/astrid/data/Task.java create mode 100644 app/src/main/java/com/todoroo/astrid/data/Task.kt diff --git a/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt index 24662a586..3aa96bd07 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt @@ -43,7 +43,7 @@ class AlarmJobServiceTest : InjectingTestCase() { val task = newTask() taskDao.createNew(task) val alarmTime = DateTime(2017, 9, 24, 19, 57) - val alarm = Alarm(task.getId(), alarmTime.millis) + val alarm = Alarm(task.id!!, alarmTime.millis) alarm.id = alarmDao.insert(alarm) alarmService.scheduleAllAlarms() Mockito.verify(jobs).add(AlarmEntry(alarm)) @@ -54,7 +54,7 @@ class AlarmJobServiceTest : InjectingTestCase() { val alarmTime = DateTime(2017, 9, 24, 19, 57) val task = newTask(with(REMINDER_LAST, alarmTime.endOfMinute())) taskDao.createNew(task) - alarmDao.insert(Alarm(task.getId(), alarmTime.millis)) + alarmDao.insert(Alarm(task.id!!, alarmTime.millis)) alarmService.scheduleAllAlarms() } diff --git a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt index f1722cef5..0eac8731b 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt @@ -32,32 +32,32 @@ class TaskDaoTests : InjectingTestCase() { // create task "happy" var task = Task() - task.setTitle("happy") + task.title = "happy" taskDao.createNew(task) assertEquals(1, taskDao.getAll().size) - val happyId = task.getId() + val happyId = task.id!! assertNotSame(Task.NO_ID, happyId) task = taskDao.fetch(happyId)!! - assertEquals("happy", task.getTitle()) + assertEquals("happy", task.title) // create task "sad" task = Task() - task.setTitle("sad") + task.title = "sad" taskDao.createNew(task) assertEquals(2, taskDao.getAll().size) // rename sad to melancholy - val sadId = task.getId() + val sadId = task.id!! assertNotSame(Task.NO_ID, sadId) - task.setTitle("melancholy") + task.title = "melancholy" taskDao.save(task) assertEquals(2, taskDao.getAll().size) // check state task = taskDao.fetch(happyId)!! - assertEquals("happy", task.getTitle()) + assertEquals("happy", task.title) task = taskDao.fetch(sadId)!! - assertEquals("melancholy", task.getTitle()) + assertEquals("melancholy", task.title) } /** Test various task fetch conditions */ @@ -65,33 +65,33 @@ class TaskDaoTests : InjectingTestCase() { fun testTaskConditions() { // create normal task var task = Task() - task.setTitle("normal") + task.title = "normal" taskDao.createNew(task) // create blank task task = Task() - task.setTitle("") + task.title = "" taskDao.createNew(task) // create hidden task task = Task() - task.setTitle("hidden") - task.setHideUntil(DateUtilities.now() + 10000) + task.title = "hidden" + task.hideUntil = DateUtilities.now() + 10000 taskDao.createNew(task) // create task with deadlines task = Task() - task.setTitle("deadlineInFuture") - task.setDueDate(DateUtilities.now() + 10000) + task.title = "deadlineInFuture" + task.dueDate = DateUtilities.now() + 10000 taskDao.createNew(task) task = Task() - task.setTitle("deadlineInPast") - task.setDueDate(DateUtilities.now() - 10000) + task.title = "deadlineInPast" + task.dueDate = DateUtilities.now() - 10000 taskDao.createNew(task) // create completed task task = Task() - task.setTitle("completed") + task.title = "completed" task.completionDate = DateUtilities.now() - 10000 taskDao.createNew(task) @@ -109,7 +109,7 @@ class TaskDaoTests : InjectingTestCase() { // create task "happy" val task = Task() - task.setTitle("happy") + task.title = "happy" taskDao.createNew(task) assertEquals(1, taskDao.getAll().size) @@ -123,8 +123,8 @@ class TaskDaoTests : InjectingTestCase() { fun testSaveWithoutCreate() { // try to save task "happy" val task = Task() - task.setTitle("happy") - task.setId(1L) + task.title = "happy" + task.id = 1L taskDao.save(task) assertEquals(0, taskDao.getAll().size) } diff --git a/app/src/androidTest/java/com/todoroo/astrid/data/TaskTest.kt b/app/src/androidTest/java/com/todoroo/astrid/data/TaskTest.kt index 82aec170b..0f5c9f2a8 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/data/TaskTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/data/TaskTest.kt @@ -79,7 +79,7 @@ class TaskTest { @Test fun testTaskHasDueTime() { val task = Task() - task.setDueDate(1388516076000L) + task.dueDate = 1388516076000L assertTrue(task.hasDueTime()) assertTrue(task.hasDueDate()) } @@ -87,7 +87,7 @@ class TaskTest { @Test fun testTaskHasDueDate() { val task = Task() - task.setDueDate(1388469600000L) + task.dueDate = 1388469600000L assertFalse(task.hasDueTime()) assertTrue(task.hasDueDate()) } @@ -148,7 +148,7 @@ class TaskTest { val now = org.tasks.time.DateTimeUtils.currentTimeMillis() freezeAt(now) { val task = Task() - task.setHideUntil(now) + task.hideUntil = now assertFalse(task.isHidden) } } @@ -158,7 +158,7 @@ class TaskTest { val now = org.tasks.time.DateTimeUtils.currentTimeMillis() freezeAt(now) { val task = Task() - task.setHideUntil(now + 1) + task.hideUntil = now + 1 assertTrue(task.isHidden) } } @@ -180,7 +180,7 @@ class TaskTest { val now = org.tasks.time.DateTimeUtils.currentTimeMillis() freezeAt(now) { val task = Task() - task.setDueDate(now) + task.dueDate = now assertFalse(task.isOverdue) } } @@ -190,7 +190,7 @@ class TaskTest { val dueDate = org.tasks.time.DateTimeUtils.currentTimeMillis() freezeAt(dueDate + 1) { val task = Task() - task.setDueDate(dueDate) + task.dueDate = dueDate assertTrue(task.isOverdue) } } @@ -200,7 +200,7 @@ class TaskTest { val dueDate = DateTime().startOfDay() freezeAt(dueDate.plusHours(12).minusMillis(1)) { val task = Task() - task.setDueDate(dueDate.millis) + task.dueDate = dueDate.millis assertFalse(task.hasDueTime()) assertFalse(task.isOverdue) } @@ -211,7 +211,7 @@ class TaskTest { val dueDate = DateTime().startOfDay() freezeAt(dueDate.plusHours(12)) { val task = Task() - task.setDueDate(dueDate.millis) + task.dueDate = dueDate.millis assertFalse(task.hasDueTime()) assertFalse(task.isOverdue) } @@ -222,7 +222,7 @@ class TaskTest { val dueDate = DateTime().startOfDay() freezeAt(dueDate.plusDays(1)) { val task = Task() - task.setDueDate(dueDate.millis) + task.dueDate = dueDate.millis assertFalse(task.hasDueTime()) assertTrue(task.isOverdue) } diff --git a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt index e6fa27c16..6e96dc439 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt @@ -52,18 +52,18 @@ class GtasksMetadataServiceTest : InjectingTestCase() { // --- helpers private fun whenSearchForMetadata() { - metadata = googleTaskDao.getByTaskId(task!!.getId()) + metadata = googleTaskDao.getByTaskId(task!!.id!!) } private fun taskWithMetadata(id: String?): Task { val task = Task() - task.setTitle("cats") + task.title = "cats" taskDao.createNew(task) - val metadata = GoogleTask(task.getId(), "") + val metadata = GoogleTask(task.id!!, "") if (id != null) { metadata.remoteId = id } - metadata.task = task.getId() + metadata.task = task.id!! googleTaskDao.insert(metadata) return task } @@ -74,7 +74,7 @@ class GtasksMetadataServiceTest : InjectingTestCase() { private fun taskWithoutMetadata(): Task { val task = Task() - task.setTitle("dogs") + task.title = "dogs" taskDao.createNew(task) return task } diff --git a/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt b/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt index f08fd40a6..328cd2f82 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt @@ -29,7 +29,7 @@ class TaskTest : InjectingTestCase() { fun testReadTaskFromDb() { val task = Task() taskDao.createNew(task) - val fromDb = taskDao.fetch(task.getId()) + val fromDb = taskDao.fetch(task.id!!) assertEquals(task, fromDb) } diff --git a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt index 7397828e1..8e56168c2 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt @@ -80,7 +80,7 @@ class ReminderServiceTest : InjectingTestCase() { service.scheduleAlarm(task) val order = Mockito.inOrder(jobs) order.verify(jobs).cancelReminder(1) - order.verify(jobs).add(ReminderEntry(1, task.getDueDate(), ReminderService.TYPE_DUE)) + order.verify(jobs).add(ReminderEntry(1, task.dueDate!!, ReminderService.TYPE_DUE)) } @Test @@ -92,7 +92,7 @@ class ReminderServiceTest : InjectingTestCase() { service.scheduleAlarm(task) val order = Mockito.inOrder(jobs) order.verify(jobs).cancelReminder(1) - order.verify(jobs).add(ReminderEntry(1, task.getDueDate(), ReminderService.TYPE_DUE)) + order.verify(jobs).add(ReminderEntry(1, task.dueDate!!, ReminderService.TYPE_DUE)) } @Test @@ -154,7 +154,7 @@ class ReminderServiceTest : InjectingTestCase() { service.scheduleAlarm(task) val order = Mockito.inOrder(jobs) order.verify(jobs).cancelReminder(1) - order.verify(jobs).add(ReminderEntry(1, task.getDueDate(), ReminderService.TYPE_DUE)) + order.verify(jobs).add(ReminderEntry(1, task.dueDate!!, ReminderService.TYPE_DUE)) } @Test @@ -171,7 +171,7 @@ class ReminderServiceTest : InjectingTestCase() { order.verify(jobs).cancelReminder(1) order .verify(jobs) - .add(ReminderEntry(1, task.reminderSnooze, ReminderService.TYPE_SNOOZE)) + .add(ReminderEntry(1, task.reminderSnooze!!, ReminderService.TYPE_SNOOZE)) } @Test diff --git a/app/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.kt b/app/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.kt index 5abc6a04e..56a1824d1 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/repeats/AdvancedRepeatTest.kt @@ -45,7 +45,7 @@ class AdvancedRepeatTest { // test specific day & time val dayWithTime = Task.createDueDate( Task.URGENCY_SPECIFIC_DAY_TIME, DateTime(2010, 8, 1, 10, 4, 0).millis) - task!!.setDueDate(dayWithTime) + task!!.dueDate = dayWithTime val nextDayWithTime = dayWithTime + DateUtilities.ONE_DAY nextDueDate = RepeatTaskHelper.computeNextDueDate(task, rrule!!.toIcal(), false) assertDateTimeEquals(nextDayWithTime, nextDueDate) @@ -60,7 +60,7 @@ class AdvancedRepeatTest { // test specific day & time val dayWithTime = Task.createDueDate( Task.URGENCY_SPECIFIC_DAY_TIME, DateTime(2010, 8, 1, 10, 4, 0).millis) - task!!.setDueDate(dayWithTime) + task!!.dueDate = dayWithTime val todayWithTime = DateTimeUtils.newDateTime().withHourOfDay(10).withMinuteOfHour(4).withSecondOfMinute(1) var nextDayWithTimeLong = todayWithTime.millis nextDayWithTimeLong += DateUtilities.ONE_DAY @@ -206,7 +206,7 @@ class AdvancedRepeatTest { } private fun assertDueDate(actual: Long, expectedWhich: Int, expectedDayOfWeek: Int) { - val expected = getDate(task!!.getDueDate(), expectedWhich, expectedDayOfWeek) + val expected = getDate(task!!.dueDate!!, expectedWhich, expectedDayOfWeek) assertEquals(expected, actual) } @@ -220,7 +220,7 @@ class AdvancedRepeatTest { private fun setTaskDueDate(which: Int, day: Int) { val time = getDate(DateUtilities.now(), which, day) - task!!.setDueDate(time) + task!!.dueDate = time } private fun getDate(start: Long, which: Int, dayOfWeek: Int): Long { diff --git a/app/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.kt b/app/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.kt index 7cdff4384..865e3a0e1 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/repeats/NewRepeatTests.kt @@ -224,8 +224,8 @@ class NewRepeatTests { private fun newFromDue(frequency: Frequency, interval: Int, dueDateTime: DateTime): Task { return object : Task() { init { - setRecurrence(getRecurrenceRule(frequency, interval, false)) - setDueDate(dueDateTime.millis) + recurrence = getRecurrenceRule(frequency, interval, false) + dueDate = dueDateTime.millis } } } @@ -233,8 +233,8 @@ class NewRepeatTests { private fun newWeeklyFromDue(interval: Int, dueDateTime: DateTime, vararg weekdays: WeekdayNum): Task { return object : Task() { init { - setRecurrence(getRecurrenceRule(Frequency.WEEKLY, interval, false, *weekdays)) - setDueDate(dueDateTime.millis) + recurrence = getRecurrenceRule(Frequency.WEEKLY, interval, false, *weekdays) + dueDate = dueDateTime.millis } } } @@ -243,9 +243,9 @@ class NewRepeatTests { frequency: Frequency, interval: Int, dueDateTime: DateTime, completionDate: DateTime): Task { return object : Task() { init { - setRecurrence(getRecurrenceRule(frequency, interval, true)) - setDueDate(dueDateTime.millis) - setCompletionDate(completionDate.millis) + recurrence = getRecurrenceRule(frequency, interval, true) + dueDate = dueDateTime.millis + this.completionDate = completionDate.millis } } } @@ -254,9 +254,9 @@ class NewRepeatTests { interval: Int, dueDateTime: DateTime, completionDate: DateTime, vararg weekdays: WeekdayNum): Task { return object : Task() { init { - setRecurrence(getRecurrenceRule(Frequency.WEEKLY, interval, true, *weekdays)) - setDueDate(dueDateTime.millis) - setCompletionDate(completionDate.millis) + recurrence = getRecurrenceRule(Frequency.WEEKLY, interval, true, *weekdays) + dueDate = dueDateTime.millis + this.completionDate = completionDate.millis } } } diff --git a/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt b/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt index a5923cfab..ab066d7ca 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt @@ -90,7 +90,7 @@ class RepeatTaskHelperTest : InjectingTestCase() { with(RRULE, RRule("RRULE:FREQ=MINUTELY;COUNT=2;INTERVAL=30"))) repeatAndVerify( task, DateTime(2017, 10, 4, 13, 30, 1), DateTime(2017, 10, 4, 14, 0, 1)) - assertEquals(1, RRule(task.recurrenceWithoutFrom).count) + assertEquals(1, RRule(task.getRecurrenceWithoutFrom()).count) } @Test diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt index 35c881ee5..36e8cbeb4 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt @@ -79,17 +79,17 @@ class QuickAddMarkupTest : InjectingTestCase() { } private fun assertTitleBecomes(title: String) { - assertEquals(title, task!!.getTitle()) + assertEquals(title, task!!.title) } private fun whenTitleIs(title: String) { task = Task() - task!!.setTitle(title) + task!!.title = title tags.clear() TitleParser.parse(tagDataDao, task, tags) } private fun assertPriority(priority: Int) { - assertEquals(priority, task!!.getPriority() as Int) + assertEquals(priority, task!!.priority) } } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt index 8be1a88ca..3437d9a05 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt @@ -121,7 +121,7 @@ class TaskMoverTest : InjectingTestCase() { assertEquals(3, deleted.size.toLong()) val task = caldavDao.getTask(3) assertEquals("2", task!!.calendar) - assertEquals(2, taskDao.fetch(3)!!.getParent()) + assertEquals(2, taskDao.fetch(3)!!.parent) } @Test @@ -132,7 +132,7 @@ class TaskMoverTest : InjectingTestCase() { moveToCaldavList("1", 1) val task = caldavDao.getTask(2) assertEquals("1", task!!.calendar) - assertEquals(1, taskDao.fetch(2)!!.getParent()) + assertEquals(1, taskDao.fetch(2)!!.parent) } @Test @@ -142,7 +142,7 @@ class TaskMoverTest : InjectingTestCase() { createSubtask(3, 2) moveToGoogleTasks("1", 1) assertEquals(1, googleTaskDao.getByTaskId(3)!!.parent) - assertEquals(0, taskDao.fetch(3)!!.getParent()) + assertEquals(0, taskDao.fetch(3)!!.parent) } @Test @@ -150,7 +150,7 @@ class TaskMoverTest : InjectingTestCase() { createTasks(1) createSubtask(2, 1) moveToGoogleTasks("1", 2) - assertEquals(0, taskDao.fetch(2)!!.getParent()) + assertEquals(0, taskDao.fetch(2)!!.parent) } @Test @@ -158,7 +158,7 @@ class TaskMoverTest : InjectingTestCase() { createTasks(1) createSubtask(2, 1) moveToCaldavList("1", 2) - assertEquals(0, taskDao.fetch(2)!!.getParent()) + assertEquals(0, taskDao.fetch(2)!!.parent) } @Test @@ -209,7 +209,7 @@ class TaskMoverTest : InjectingTestCase() { with(REMOTE_PARENT, "a")))) moveToCaldavList("2", 2) assertEquals("2", caldavDao.getTask(2)!!.calendar) - assertEquals(0, taskDao.fetch(2)!!.getParent()) + assertEquals(0, taskDao.fetch(2)!!.parent) } @Test @@ -235,7 +235,7 @@ class TaskMoverTest : InjectingTestCase() { createSubtask(3, 2) moveToCaldavList("1", 1) assertEquals("1", caldavDao.getTask(3)!!.calendar) - assertEquals(2, taskDao.fetch(3)!!.getParent()) + assertEquals(2, taskDao.fetch(3)!!.parent) } @Test @@ -265,8 +265,8 @@ class TaskMoverTest : InjectingTestCase() { assertNull(googleTaskDao.getByTaskId(2)) val task = taskDao.fetch(2)!! assertFalse(task.isDeleted) - assertEquals(1, task.getParent()) - assertEquals(taskDao.fetch(1)!!.uuid, task.getParentUuid()) + assertEquals(1, task.parent) + assertEquals(taskDao.fetch(1)!!.uuid, task.parentUuid) } @Test @@ -291,8 +291,8 @@ class TaskMoverTest : InjectingTestCase() { assertNull(caldavDao.getTask(3)) val task = taskDao.fetch(3)!! assertFalse(task.isDeleted) - assertEquals(2, task.getParent()) - assertEquals(taskDao.fetch(2)!!.uuid, task.getParentUuid()) + assertEquals(2, task.parent) + assertEquals(taskDao.fetch(2)!!.uuid, task.parentUuid) } @Test diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt index 6a102aa79..945f0fade 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt @@ -45,7 +45,7 @@ class TitleParserTest : InjectingTestCase() { val nothing = Task() assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) - assertEquals(task.getRecurrence(), nothing.getRecurrence()) + assertEquals(task.recurrence, nothing.recurrence) } /** Tests correct date is parsed */ @@ -68,7 +68,7 @@ class TitleParserTest : InjectingTestCase() { for (i in 0..22) { val testTitle = "Jog on " + titleMonthStrings[i] + " 12." val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.monthOfYear, i / 2 + 1) assertEquals(date.dayOfMonth, 12) } @@ -79,7 +79,7 @@ class TitleParserTest : InjectingTestCase() { for (i in 1..12) { val testTitle = "Jog on $i/12/13" val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.monthOfYear, i) assertEquals(date.dayOfMonth, 12) assertEquals(date.year, 2013) @@ -90,7 +90,7 @@ class TitleParserTest : InjectingTestCase() { fun testArmyTime() { val testTitle = "Jog on 23:21." val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 23) assertEquals(date.minuteOfHour, 21) } @@ -99,7 +99,7 @@ class TitleParserTest : InjectingTestCase() { fun test_AM_PM() { val testTitle = "Jog at 8:33 PM." val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 20) assertEquals(date.minuteOfHour, 33) } @@ -108,7 +108,7 @@ class TitleParserTest : InjectingTestCase() { fun test_at_hour() { val testTitle = "Jog at 8 PM." val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 20) assertEquals(date.minuteOfHour, 0) } @@ -117,7 +117,7 @@ class TitleParserTest : InjectingTestCase() { fun test_oclock_AM() { val testTitle = "Jog at 8 o'clock AM." val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 8) assertEquals(date.minuteOfHour, 0) } @@ -127,7 +127,7 @@ class TitleParserTest : InjectingTestCase() { val testTitles = arrayOf("Jog 8 AM", "Jog 8 o'clock AM", "at 8:00 AM") for (testTitle in testTitles) { val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 8) assertEquals(date.minuteOfHour, 0) } @@ -140,7 +140,7 @@ class TitleParserTest : InjectingTestCase() { ) for (testTitle in testTitles) { val task = insertTitleAddTask(testTitle) - val date = DateTimeUtils.newDateTime(task.getDueDate()) + val date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.hourOfDay, 12) assertEquals(date.minuteOfHour, 30) } @@ -156,12 +156,12 @@ class TitleParserTest : InjectingTestCase() { val today = Calendar.getInstance() var title = "Jog today" var task = taskCreator.createWithValues(title) - var date = DateTimeUtils.newDateTime(task.getDueDate()) + var date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.dayOfWeek, today[Calendar.DAY_OF_WEEK]) // Calendar starts 1-6, date.getDay() starts at 0 title = "Jog tomorrow" task = taskCreator.createWithValues(title) - date = DateTimeUtils.newDateTime(task.getDueDate()) + date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.dayOfWeek % 7, (today[Calendar.DAY_OF_WEEK] + 1) % 7) val days = arrayOf( "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday") @@ -169,11 +169,11 @@ class TitleParserTest : InjectingTestCase() { for (i in 1..6) { title = "Jog " + days[i] task = taskCreator.createWithValues(title) - date = DateTimeUtils.newDateTime(task.getDueDate()) + date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.dayOfWeek, i + 1) title = "Jog " + abrevDays[i] task = taskCreator.createWithValues(title) - date = DateTimeUtils.newDateTime(task.getDueDate()) + date = DateTimeUtils.newDateTime(task.dueDate!!) assertEquals(date.dayOfWeek, i + 1) } } @@ -186,12 +186,12 @@ class TitleParserTest : InjectingTestCase() { for (acceptedString in acceptedStrings) { val title = "Jog $acceptedString" val task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.NONE) + assertEquals(task.priority, Task.Priority.NONE) } for (acceptedString in acceptedStrings) { val title = "$acceptedString jog" val task = taskCreator.createWithValues(title) - assertNotSame(task.getPriority(), Task.Priority.NONE) + assertNotSame(task.priority, Task.Priority.NONE) } } @@ -203,20 +203,20 @@ class TitleParserTest : InjectingTestCase() { for (acceptedStringAtEnd in acceptedStringsAtEnd) { task = taskCreator.basicQuickAddTask( "Jog $acceptedStringAtEnd") // test at end of task. should set importance. - assertEquals(task.getPriority() as Int, Task.Priority.LOW) + assertEquals(task.priority, Task.Priority.LOW) } for (acceptedStringAtEnd in acceptedStringsAtEnd) { task = taskCreator.basicQuickAddTask(acceptedStringAtEnd + " jog") // test at beginning of task. should not set importance. - assertEquals(task.getPriority() as Int, Task.Priority.LOW) + assertEquals(task.priority, Task.Priority.LOW) } for (acceptedStringAnywhere in acceptedStringsAnywhere) { task = taskCreator.basicQuickAddTask( "Jog $acceptedStringAnywhere") // test at end of task. should set importance. - assertEquals(task.getPriority() as Int, Task.Priority.LOW) + assertEquals(task.priority, Task.Priority.LOW) task = taskCreator.basicQuickAddTask( "$acceptedStringAnywhere jog") // test at beginning of task. should set importance. - assertEquals(task.getPriority() as Int, Task.Priority.LOW) + assertEquals(task.priority, Task.Priority.LOW) } } @@ -227,18 +227,18 @@ class TitleParserTest : InjectingTestCase() { for (acceptedStringAtEnd in acceptedStringsAtEnd) { var title = "Jog $acceptedStringAtEnd" var task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.MEDIUM) + assertEquals(task.priority, Task.Priority.MEDIUM) title = "$acceptedStringAtEnd jog" task = taskCreator.createWithValues(title) - assertNotSame(task.getPriority(), Task.Priority.MEDIUM) + assertNotSame(task.priority, Task.Priority.MEDIUM) } for (acceptedStringAnywhere in acceptedStringsAnywhere) { var title = "Jog $acceptedStringAnywhere" var task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.MEDIUM) + assertEquals(task.priority, Task.Priority.MEDIUM) title = "$acceptedStringAnywhere jog" task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.MEDIUM) + assertEquals(task.priority, Task.Priority.MEDIUM) } } @@ -255,18 +255,18 @@ class TitleParserTest : InjectingTestCase() { for (acceptedStringAtEnd in acceptedStringsAtEnd) { var title = "Jog $acceptedStringAtEnd" var task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.HIGH) + assertEquals(task.priority, Task.Priority.HIGH) title = "$acceptedStringAtEnd jog" task = taskCreator.createWithValues(title) - assertNotSame(task.getPriority(), Task.Priority.HIGH) + assertNotSame(task.priority, Task.Priority.HIGH) } for (acceptedStringAnywhere in acceptedStringsAnywhere) { var title = "Jog $acceptedStringAnywhere" var task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.HIGH) + assertEquals(task.priority, Task.Priority.HIGH) title = "$acceptedStringAnywhere jog" task = taskCreator.createWithValues(title) - assertEquals(task.getPriority() as Int, Task.Priority.HIGH) + assertEquals(task.priority, Task.Priority.HIGH) } } // ----------------Priority end----------------// @@ -279,19 +279,19 @@ class TitleParserTest : InjectingTestCase() { val rrule = RRule() rrule.freq = Frequency.DAILY rrule.interval = 1 - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) title = "Jog every day" task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) for (i in 1..12) { title = "Jog every $i days." rrule.interval = i task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) } @@ -305,19 +305,19 @@ class TitleParserTest : InjectingTestCase() { val rrule = RRule() rrule.freq = Frequency.WEEKLY rrule.interval = 1 - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) title = "Jog every week" task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) for (i in 1..12) { title = "Jog every $i weeks" rrule.interval = i task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) } @@ -331,19 +331,19 @@ class TitleParserTest : InjectingTestCase() { val rrule = RRule() rrule.freq = Frequency.MONTHLY rrule.interval = 1 - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) title = "Jog every month" task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) for (i in 1..12) { title = "Jog every $i months" rrule.interval = i task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertFalse(task.hasDueTime()) assertFalse(task.hasDueDate()) } @@ -356,17 +356,17 @@ class TitleParserTest : InjectingTestCase() { val rrule = RRule() rrule.freq = Frequency.DAILY rrule.interval = 1 - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) title = "Jog every day starting from today" task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) for (i in 1..12) { title = "Jog every $i days starting from today" rrule.interval = i task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) } } @@ -378,17 +378,17 @@ class TitleParserTest : InjectingTestCase() { val rrule = RRule() rrule.freq = Frequency.WEEKLY rrule.interval = 1 - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) title = "Jog every week starting from today" task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) for (i in 1..12) { title = "Jog every $i weeks starting from today" rrule.interval = i task = taskCreator.createWithValues(title) - assertEquals(task.getRecurrence(), rrule.toIcal()) + assertEquals(task.recurrence, rrule.toIcal()) assertTrue(task.hasDueDate()) } } @@ -401,7 +401,7 @@ class TitleParserTest : InjectingTestCase() { var task: Task for (acceptedString in acceptedStrings) { task = Task() - task.setTitle("Jog $acceptedString") // test at end of task. should set importance. + task.title = "Jog $acceptedString" // test at end of task. should set importance. val tags = ArrayList() TitleParser.listHelper(tagDataDao, task, tags) val tag = TitleParser.trimParenthesis(acceptedString) @@ -418,7 +418,7 @@ class TitleParserTest : InjectingTestCase() { var task: Task for (acceptedString in acceptedStrings) { task = Task() - task.setTitle("Jog $acceptedString") // test at end of task. should set importance. + task.title = "Jog $acceptedString" // test at end of task. should set importance. val tags = ArrayList() TitleParser.listHelper(tagDataDao, task, tags) val tag = TitleParser.trimParenthesis(acceptedString) diff --git a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt index ac4c8d043..e8bb14ed6 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt @@ -22,7 +22,7 @@ class SubtasksHelperTest : SubtasksTestCase() { private fun createTask(title: String, uuid: String) { val t = Task() - t.setTitle(title) + t.title = title t.uuid = uuid taskDao.createNew(t) } diff --git a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt index 5799e3b23..fab5489c6 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt @@ -46,7 +46,7 @@ class SubtasksMovingTest : SubtasksTestCase() { private fun createTask(title: String): Task { val task = Task() - task.setTitle(title) + task.title = title taskDao.createNew(task) return task } diff --git a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.kt b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.kt index 56e6d9e2d..231b07473 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksTestCase.kt @@ -29,7 +29,7 @@ abstract class SubtasksTestCase : InjectingTestCase() { fun expectParentAndPosition(task: Task, parent: Task?, positionInParent: Int) { val parentId = if (parent == null) "-1" else parent.uuid val n = updater.findNodeForTask(task.uuid) - assertNotNull("No node found for task " + task.getTitle(), n) + assertNotNull("No node found for task " + task.title, n) assertEquals("Parent mismatch", parentId, n.parent.uuid) assertEquals("Position mismatch", positionInParent, n.parent.children.indexOf(n)) } diff --git a/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt b/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt index 4b047e3fd..8d1b9f225 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt @@ -14,8 +14,8 @@ open class NewSyncTestCase : InjectingTestCase() { fun createTask(): Task { val task = Task() - task.setTitle(SYNC_TASK_TITLE) - task.setPriority(SYNC_TASK_IMPORTANCE) + task.title = SYNC_TASK_TITLE + task.priority = SYNC_TASK_IMPORTANCE taskDao.createNew(task) return task } diff --git a/app/src/androidTest/java/org/tasks/caldav/AppleRemindersTests.kt b/app/src/androidTest/java/org/tasks/caldav/AppleRemindersTests.kt index 55f331426..5893e8f6d 100644 --- a/app/src/androidTest/java/org/tasks/caldav/AppleRemindersTests.kt +++ b/app/src/androidTest/java/org/tasks/caldav/AppleRemindersTests.kt @@ -27,12 +27,12 @@ class AppleRemindersTests { @Test fun readTitle() { - assertEquals("Test title", vtodo("apple/basic_no_due_date.txt").getTitle()) + assertEquals("Test title", vtodo("apple/basic_no_due_date.txt").title) } @Test fun readDescription() { - assertEquals("Test description", vtodo("apple/basic_no_due_date.txt").getNotes()) + assertEquals("Test description", vtodo("apple/basic_no_due_date.txt").notes) } @Test @@ -46,7 +46,7 @@ class AppleRemindersTests { fun readDueDate() { assertEquals( DateTime(2018, 4, 16, 18, 0, 1, 0).millis, - vtodo("apple/basic_due_date.txt").getDueDate() as Long) + vtodo("apple/basic_due_date.txt").dueDate) } @Test @@ -58,26 +58,26 @@ class AppleRemindersTests { @Test fun repeatDaily() { - assertEquals("RRULE:FREQ=DAILY;INTERVAL=1", vtodo("apple/repeat_daily.txt").getRecurrence()) + assertEquals("RRULE:FREQ=DAILY;INTERVAL=1", vtodo("apple/repeat_daily.txt").recurrence) } @Test fun noPriority() { - assertEquals(Task.Priority.NONE, vtodo("apple/priority_none.txt").getPriority() as Int) + assertEquals(Task.Priority.NONE, vtodo("apple/priority_none.txt").priority) } @Test fun lowPriority() { - assertEquals(Task.Priority.LOW, vtodo("apple/priority_low.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("apple/priority_low.txt").priority) } @Test fun mediumPriority() { - assertEquals(Task.Priority.MEDIUM, vtodo("apple/priority_medium.txt").getPriority() as Int) + assertEquals(Task.Priority.MEDIUM, vtodo("apple/priority_medium.txt").priority) } @Test fun highPriority() { - assertEquals(Task.Priority.HIGH, vtodo("apple/priority_high.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("apple/priority_high.txt").priority) } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/caldav/NextCloudTests.kt b/app/src/androidTest/java/org/tasks/caldav/NextCloudTests.kt index f179e6505..13a49456d 100644 --- a/app/src/androidTest/java/org/tasks/caldav/NextCloudTests.kt +++ b/app/src/androidTest/java/org/tasks/caldav/NextCloudTests.kt @@ -27,12 +27,12 @@ class NextCloudTests { @Test fun readTitle() { - assertEquals("Test title", vtodo("nextcloud/basic_no_due_date.txt").getTitle()) + assertEquals("Test title", vtodo("nextcloud/basic_no_due_date.txt").title) } @Test fun readDescription() { - assertEquals("Test description", vtodo("nextcloud/basic_no_due_date.txt").getNotes()) + assertEquals("Test description", vtodo("nextcloud/basic_no_due_date.txt").notes) } @Test @@ -46,56 +46,56 @@ class NextCloudTests { fun readDueDate() { assertEquals( DateTime(2018, 4, 17, 17, 0, 1).millis, - vtodo("nextcloud/basic_due_date.txt").getDueDate() as Long) + vtodo("nextcloud/basic_due_date.txt").dueDate) } @Test fun priorityNoStars() { - assertEquals(Task.Priority.NONE, vtodo("nextcloud/priority_no_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.NONE, vtodo("nextcloud/priority_no_stars.txt").priority) } @Test fun priorityOneStar() { - assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_1_star.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_1_star.txt").priority) } @Test fun priorityTwoStars() { - assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_2_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_2_stars.txt").priority) } @Test fun priorityThreeStars() { - assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_3_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_3_stars.txt").priority) } @Test fun priorityFourStars() { - assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_4_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("nextcloud/priority_4_stars.txt").priority) } @Test fun priorityFiveStars() { - assertEquals(Task.Priority.MEDIUM, vtodo("nextcloud/priority_5_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.MEDIUM, vtodo("nextcloud/priority_5_stars.txt").priority) } @Test fun prioritySixStars() { - assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_6_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_6_stars.txt").priority) } @Test fun prioritySevenStars() { - assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_7_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_7_stars.txt").priority) } @Test fun priorityEightStars() { - assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_8_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_8_stars.txt").priority) } @Test fun priorityNineStars() { - assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_9_stars.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("nextcloud/priority_9_stars.txt").priority) } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/caldav/ThunderbirdTests.kt b/app/src/androidTest/java/org/tasks/caldav/ThunderbirdTests.kt index 21d6c0453..424e2e462 100644 --- a/app/src/androidTest/java/org/tasks/caldav/ThunderbirdTests.kt +++ b/app/src/androidTest/java/org/tasks/caldav/ThunderbirdTests.kt @@ -27,63 +27,63 @@ class ThunderbirdTests { @Test fun readTitle() { - assertEquals("Test title", vtodo("thunderbird/basic_no_due_date.txt").getTitle()) + assertEquals("Test title", vtodo("thunderbird/basic_no_due_date.txt").title) } @Test fun readDescription() { - assertEquals("Test description", vtodo("thunderbird/basic_no_due_date.txt").getNotes()) + assertEquals("Test description", vtodo("thunderbird/basic_no_due_date.txt").notes) } @Test fun readCreationDate() { assertEquals( DateTime(2018, 4, 17, 11, 31, 52).millis, - vtodo("thunderbird/basic_no_due_date.txt").creationDate as Long) + vtodo("thunderbird/basic_no_due_date.txt").creationDate) } @Test fun readDueDate() { assertEquals( DateTime(2018, 4, 17, 14, 0, 1).millis, - vtodo("thunderbird/basic_due_date.txt").getDueDate() as Long) + vtodo("thunderbird/basic_due_date.txt").dueDate) } @Test fun completed() { assertEquals( DateTime(2018, 4, 17, 16, 24, 29).millis, - vtodo("thunderbird/basic_completed.txt").completionDate as Long) + vtodo("thunderbird/basic_completed.txt").completionDate) } @Test fun repeatDaily() { assertEquals( - "RRULE:FREQ=DAILY;INTERVAL=1", vtodo("thunderbird/repeat_daily.txt").getRecurrence()) + "RRULE:FREQ=DAILY;INTERVAL=1", vtodo("thunderbird/repeat_daily.txt").recurrence) } @Test fun priorityNotSet() { - assertEquals(Task.Priority.NONE, vtodo("thunderbird/basic_no_due_date.txt").getPriority() as Int) + assertEquals(Task.Priority.NONE, vtodo("thunderbird/basic_no_due_date.txt").priority) } @Test fun priorityNotSpecified() { - assertEquals(Task.Priority.NONE, vtodo("thunderbird/priority_unspecified.txt").getPriority() as Int) + assertEquals(Task.Priority.NONE, vtodo("thunderbird/priority_unspecified.txt").priority) } @Test fun lowPriority() { - assertEquals(Task.Priority.LOW, vtodo("thunderbird/priority_low.txt").getPriority() as Int) + assertEquals(Task.Priority.LOW, vtodo("thunderbird/priority_low.txt").priority) } @Test fun normalPriority() { - assertEquals(Task.Priority.MEDIUM, vtodo("thunderbird/priority_normal.txt").getPriority() as Int) + assertEquals(Task.Priority.MEDIUM, vtodo("thunderbird/priority_normal.txt").priority) } @Test fun highPriority() { - assertEquals(Task.Priority.HIGH, vtodo("thunderbird/priority_high.txt").getPriority() as Int) + assertEquals(Task.Priority.HIGH, vtodo("thunderbird/priority_high.txt").priority) } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt b/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt index 958b25159..872132e4f 100644 --- a/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt @@ -36,8 +36,8 @@ class CaldavDaoTests : InjectingTestCase() { tagDataDao.createNew(two) tagDao.insert(newTag(with(TASK, task), with(TAGDATA, one))) tagDao.insert(newTag(with(TASK, task), with(TAGDATA, two))) - caldavDao.insert(CaldavTask(task.getId(), "calendar")) - assertEquals(listOf(task.getId()), caldavDao.getTasksWithTags()) + caldavDao.insert(CaldavTask(task.id!!, "calendar")) + assertEquals(listOf(task.id!!), caldavDao.getTasksWithTags()) } @Test @@ -55,7 +55,7 @@ class CaldavDaoTests : InjectingTestCase() { val task = newTask(with(ID, 1L)) taskDao.createNew(task) tagDataDao.createNew(newTagData()) - caldavDao.insert(CaldavTask(task.getId(), "calendar")) + caldavDao.insert(CaldavTask(task.id!!, "calendar")) assertTrue(caldavDao.getTasksWithTags().isEmpty()) } diff --git a/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt b/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt index 993315ee9..ea96e3a6b 100644 --- a/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt @@ -33,20 +33,20 @@ class DeletionDaoTests : InjectingTestCase() { fun markDeletedUpdatesModificationTime() { var task = newTask(MakeItEasy.with(CREATION_TIME, DateTime().minusMinutes(1))) taskDao.createNew(task) - deletionDao.markDeleted(listOf(task.getId())) - task = taskDao.fetch(task.getId())!! - assertTrue(task.modificationDate > task.creationDate) - assertTrue(task.modificationDate < DateTimeUtils.currentTimeMillis()) + deletionDao.markDeleted(listOf(task.id!!)) + task = taskDao.fetch(task.id!!)!! + assertTrue(task.modificationDate!! > task.creationDate!!) + assertTrue(task.modificationDate!! < DateTimeUtils.currentTimeMillis()) } @Test fun markDeletedUpdatesDeletionTime() { var task = newTask(MakeItEasy.with(CREATION_TIME, DateTime().minusMinutes(1))) taskDao.createNew(task) - deletionDao.markDeleted(listOf(task.getId())) - task = taskDao.fetch(task.getId())!! - assertTrue(task.deletionDate > task.creationDate) - assertTrue(task.deletionDate < DateTimeUtils.currentTimeMillis()) + deletionDao.markDeleted(listOf(task.id!!)) + task = taskDao.fetch(task.id!!)!! + assertTrue(task.deletionDate!! > task.creationDate!!) + assertTrue(task.deletionDate!! < DateTimeUtils.currentTimeMillis()) } override fun inject(component: TestComponent) = component.inject(this) diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index 2411a453e..3fa9b0f06 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -164,7 +164,7 @@ class GoogleTaskDaoTests : InjectingTestCase() { private fun insert(googleTask: GoogleTask, top: Boolean) { val task = newTask() taskDao.createNew(task) - googleTask.task = task.getId() + googleTask.task = task.id!! googleTaskDao.insertAndShift(googleTask, top) } diff --git a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt index eab4793ff..57180a908 100644 --- a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt @@ -73,7 +73,7 @@ class TagDataDaoTest : InjectingTestCase() { tagDataDao.createNew(tagTwo) tagDao.insert(newTag(with(TAGDATA, tagOne), with(TASK, taskOne))) tagDao.insert(newTag(with(TAGDATA, tagTwo), with(TASK, taskTwo))) - assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.getId())) + assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.id!!)) } @Test diff --git a/app/src/androidTest/java/org/tasks/gtasks/GoogleTaskSynchronizerTest.kt b/app/src/androidTest/java/org/tasks/gtasks/GoogleTaskSynchronizerTest.kt index 0d100f7bd..426fa470f 100644 --- a/app/src/androidTest/java/org/tasks/gtasks/GoogleTaskSynchronizerTest.kt +++ b/app/src/androidTest/java/org/tasks/gtasks/GoogleTaskSynchronizerTest.kt @@ -18,29 +18,29 @@ class GoogleTaskSynchronizerTest { @Test fun testMergeDate() { val local = newTask(with(DUE_DATE, DateTime(2016, 3, 12))) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).getDueDate(), local) - assertEquals(DateTime(2016, 3, 11, 12, 0).millis, local.getDueDate().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).dueDate!!, local) + assertEquals(DateTime(2016, 3, 11, 12, 0).millis, local.dueDate) } @Test fun testMergeTime() { val local = newTask(with(DUE_TIME, DateTime(2016, 3, 11, 13, 30))) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).getDueDate(), local) - assertEquals(DateTime(2016, 3, 11, 13, 30, 1).millis, local.getDueDate().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).dueDate!!, local) + assertEquals(DateTime(2016, 3, 11, 13, 30, 1).millis, local.dueDate) } @Test fun testDueDateAdjustHideBackwards() { val local = newTask(with(DUE_DATE, DateTime(2016, 3, 12)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE)) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).getDueDate(), local) - assertEquals(DateTime(2016, 3, 11).millis, local.getHideUntil().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).dueDate!!, local) + assertEquals(DateTime(2016, 3, 11).millis, local.hideUntil) } @Test fun testDueDateAdjustHideForwards() { val local = newTask(with(DUE_DATE, DateTime(2016, 3, 12)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE)) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 14))).getDueDate(), local) - assertEquals(DateTime(2016, 3, 14).millis, local.getHideUntil().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 14))).dueDate!!, local) + assertEquals(DateTime(2016, 3, 14).millis, local.hideUntil) } @Test @@ -48,9 +48,9 @@ class GoogleTaskSynchronizerTest { val local = newTask( with(DUE_TIME, DateTime(2016, 3, 12, 13, 30)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE_TIME)) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).getDueDate(), local) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 11))).dueDate!!, local) assertEquals( - DateTime(2016, 3, 11, 13, 30, 1).millis, local.getHideUntil().toLong()) + DateTime(2016, 3, 11, 13, 30, 1).millis, local.hideUntil) } @Test @@ -58,16 +58,16 @@ class GoogleTaskSynchronizerTest { val local = newTask( with(DUE_TIME, DateTime(2016, 3, 12, 13, 30)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE_TIME)) - GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 14))).getDueDate(), local) + GoogleTaskSynchronizer.mergeDates(newTask(with(DUE_DATE, DateTime(2016, 3, 14))).dueDate!!, local) assertEquals( - DateTime(2016, 3, 14, 13, 30, 1).millis, local.getHideUntil().toLong()) + DateTime(2016, 3, 14, 13, 30, 1).millis, local.hideUntil) } @Test fun testDueDateClearHide() { val local = newTask(with(DUE_DATE, DateTime(2016, 3, 12)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE)) - GoogleTaskSynchronizer.mergeDates(newTask().getDueDate(), local) - assertEquals(0, local.getHideUntil().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask().dueDate!!, local) + assertEquals(0L, local.hideUntil) } @Test @@ -75,8 +75,8 @@ class GoogleTaskSynchronizerTest { val local = newTask( with(DUE_TIME, DateTime(2016, 3, 12, 13, 30)), with(HIDE_TYPE, Task.HIDE_UNTIL_DUE_TIME)) - GoogleTaskSynchronizer.mergeDates(newTask().getDueDate(), local) - assertEquals(0, local.getHideUntil().toLong()) + GoogleTaskSynchronizer.mergeDates(newTask().dueDate!!, local) + assertEquals(0L, local.hideUntil) } @Test diff --git a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt index 998bf3e6b..effb7d2da 100644 --- a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt +++ b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt @@ -51,7 +51,7 @@ class BackupServiceTests : InjectingTestCase() { // make a temporary task val task = Task() - task.setTitle("helicopter") + task.title = "helicopter" taskDao.createNew(task) } diff --git a/app/src/androidTest/java/org/tasks/makers/TagMaker.kt b/app/src/androidTest/java/org/tasks/makers/TagMaker.kt index 131c774ea..f1d3b4280 100644 --- a/app/src/androidTest/java/org/tasks/makers/TagMaker.kt +++ b/app/src/androidTest/java/org/tasks/makers/TagMaker.kt @@ -18,8 +18,8 @@ object TagMaker { private val instantiator = Instantiator { lookup: PropertyLookup -> val tag = Tag() val task = lookup.valueOf(TASK, null as Task?)!! - tag.task = task.getId() - tag.setTaskUid(task.uuid) + tag.task = task.id!! + tag.setTaskUid(task.uuid!!) tag.tagUid = lookup.valueOf(TAGUID, null as String?) val tagData = lookup.valueOf(TAGDATA, null as TagData?) if (tagData != null) { diff --git a/app/src/androidTest/java/org/tasks/makers/TaskMaker.kt b/app/src/androidTest/java/org/tasks/makers/TaskMaker.kt index 0aaecbd82..94de95c75 100644 --- a/app/src/androidTest/java/org/tasks/makers/TaskMaker.kt +++ b/app/src/androidTest/java/org/tasks/makers/TaskMaker.kt @@ -34,23 +34,23 @@ object TaskMaker { val task = Task() val title = lookup.valueOf(TITLE, null as String?) if (!Strings.isNullOrEmpty(title)) { - task.setTitle(title) + task.title = title } val id = lookup.valueOf(ID, Task.NO_ID) if (id != Task.NO_ID) { - task.setId(id) + task.id = id } val priority = lookup.valueOf(PRIORITY, -1) if (priority >= 0) { - task.setPriority(priority) + task.priority = priority } val dueDate = lookup.valueOf(DUE_DATE, null as DateTime?) if (dueDate != null) { - task.setDueDate(Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, dueDate.millis)) + task.dueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, dueDate.millis) } val dueTime = lookup.valueOf(DUE_TIME, null as DateTime?) if (dueTime != null) { - task.setDueDate(Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, dueTime.millis)) + task.dueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, dueTime.millis) } val completionTime = lookup.valueOf(COMPLETION_TIME, null as DateTime?) if (completionTime != null) { @@ -66,7 +66,7 @@ object TaskMaker { } val hideType = lookup.valueOf(HIDE_TYPE, -1) if (hideType >= 0) { - task.setHideUntil(task.createHideUntil(hideType, 0)) + task.hideUntil = task.createHideUntil(hideType, 0) } val reminderFlags = lookup.valueOf(REMINDERS, -1) if (reminderFlags >= 0) { @@ -86,7 +86,7 @@ object TaskMaker { } val creationTime = lookup.valueOf(CREATION_TIME, DateTimeUtils.newDateTime()) task.creationDate = creationTime.millis - task.setParent(lookup.valueOf(PARENT, 0L)) + task.parent = lookup.valueOf(PARENT, 0L) task } diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt index f42170137..34c0aeefa 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -225,7 +225,7 @@ abstract class TaskDao(private val database: Database) { * success. */ @JvmOverloads - fun save(task: Task, original: Task? = fetch(task.getId())) { + fun save(task: Task, original: Task? = fetch(task.id!!)) { if (!task.insignificantChange(original)) { task.modificationDate = DateUtilities.now() } @@ -239,16 +239,17 @@ abstract class TaskDao(private val database: Database) { @Update abstract fun update(task: Task): Int + fun createNew(task: Task) { task.id = null - if (task.created == 0L) { - task.created = DateUtilities.now() + if (task.creationDate == 0L) { + task.creationDate = DateUtilities.now() } - if (Task.isUuidEmpty(task.remoteId)) { + if (Task.isUuidEmpty(task.remoteId!!)) { task.remoteId = UUIDHelper.newUUID() } val insert = insert(task) - task.setId(insert) + task.id = insert } @Query("SELECT * FROM tasks " diff --git a/app/src/main/java/com/todoroo/astrid/data/Task.java b/app/src/main/java/com/todoroo/astrid/data/Task.java deleted file mode 100644 index 37b4aa12c..000000000 --- a/app/src/main/java/com/todoroo/astrid/data/Task.java +++ /dev/null @@ -1,918 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.data; - -import static com.todoroo.astrid.data.SyncFlags.SUPPRESS_SYNC; -import static java.lang.annotation.RetentionPolicy.SOURCE; -import static org.tasks.Strings.isNullOrEmpty; -import static org.tasks.date.DateTimeUtils.newDateTime; - -import android.content.ContentValues; -import android.os.Parcel; -import android.os.Parcelable; -import androidx.annotation.IntDef; -import androidx.core.os.ParcelCompat; -import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.Ignore; -import androidx.room.Index; -import androidx.room.PrimaryKey; -import com.google.ical.values.RRule; -import com.todoroo.andlib.data.Property.IntegerProperty; -import com.todoroo.andlib.data.Property.LongProperty; -import com.todoroo.andlib.data.Property.StringProperty; -import com.todoroo.andlib.data.Table; -import com.todoroo.andlib.sql.Field; -import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.dao.TaskDao; -import java.lang.annotation.Retention; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Objects; -import org.tasks.backup.XmlReader; -import org.tasks.data.Tag; -import org.tasks.time.DateTime; -import timber.log.Timber; - -@Entity( - tableName = "tasks", - indices = { - @Index(name = "t_rid", value = "remoteId", unique = true), - @Index( - name = "active_and_visible", - value = {"completed", "deleted", "hideUntil"}) - }) -public class Task implements Parcelable { - - // --- table and uri - - /** table for this model */ - public static final Table TABLE = new Table("tasks"); - public static final Field FIELDS = Field.field("tasks.*"); - - public static final long NO_ID = 0; - - // --- properties - public static final LongProperty ID = new LongProperty(TABLE, "_id"); - public static final StringProperty TITLE = new StringProperty(TABLE, "title"); - public static final IntegerProperty IMPORTANCE = new IntegerProperty(TABLE, "importance"); - public static final LongProperty DUE_DATE = new LongProperty(TABLE, "dueDate"); - public static final LongProperty HIDE_UNTIL = new LongProperty(TABLE, "hideUntil"); - public static final LongProperty MODIFICATION_DATE = new LongProperty(TABLE, "modified"); - public static final LongProperty CREATION_DATE = new LongProperty(TABLE, "created"); - public static final LongProperty COMPLETION_DATE = new LongProperty(TABLE, "completed"); - public static final LongProperty DELETION_DATE = new LongProperty(TABLE, "deleted"); - public static final StringProperty NOTES = new StringProperty(TABLE, "notes"); - public static final LongProperty TIMER_START = new LongProperty(TABLE, "timerStart"); - public static final LongProperty PARENT = new LongProperty(TABLE, "parent"); - /** constant value for no uuid */ - public static final String NO_UUID = "0"; // $NON-NLS-1$ - - public static final StringProperty UUID = new StringProperty(TABLE, "remoteId"); - /** whether to send a reminder at deadline */ - public static final int NOTIFY_AT_DEADLINE = 1 << 1; - /** whether to send reminders while task is overdue */ - public static final int NOTIFY_AFTER_DEADLINE = 1 << 2; - /** reminder mode non-stop */ - public static final int NOTIFY_MODE_NONSTOP = 1 << 3; - /** reminder mode five times (exclusive with non-stop) */ - public static final int NOTIFY_MODE_FIVE = 1 << 4; - - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public Task createFromParcel(Parcel source) { - return new Task(source); - } - - @Override - public Task[] newArray(int size) { - return new Task[size]; - } - }; - /** urgency array index -> significance */ - public static final int URGENCY_NONE = 0; - - public static final int URGENCY_SPECIFIC_DAY = 7; - public static final int URGENCY_SPECIFIC_DAY_TIME = 8; - /** hide until array index -> significance */ - public static final int HIDE_UNTIL_NONE = 0; - - public static final int HIDE_UNTIL_DUE = 1; - public static final int HIDE_UNTIL_DAY_BEFORE = 2; - public static final int HIDE_UNTIL_WEEK_BEFORE = 3; - public static final int HIDE_UNTIL_SPECIFIC_DAY = 4; - // --- for astrid.com - public static final int HIDE_UNTIL_SPECIFIC_DAY_TIME = 5; - public static final int HIDE_UNTIL_DUE_TIME = 6; - static final int URGENCY_TODAY = 1; - static final int URGENCY_TOMORROW = 2; - // --- notification flags - static final int URGENCY_DAY_AFTER = 3; - static final int URGENCY_NEXT_WEEK = 4; - static final int URGENCY_IN_TWO_WEEKS = 5; - /** ID */ - @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") - public transient Long id = NO_ID; - - // --- importance settings (note: importance > 3 are supported via plugin) - /** Name of Task */ - @ColumnInfo(name = "title") - public String title = ""; - - @ColumnInfo(name = "importance") - public Integer priority = Priority.NONE; - /** Unixtime Task is due, 0 if not set */ - @ColumnInfo(name = "dueDate") - public Long dueDate = 0L; - /** Unixtime Task should be hidden until, 0 if not set */ - @ColumnInfo(name = "hideUntil") - public Long hideUntil = 0L; - /** Unixtime Task was created */ - @ColumnInfo(name = "created") - public Long created = 0L; - /** Unixtime Task was last touched */ - @ColumnInfo(name = "modified") - public Long modified = 0L; - /** Unixtime Task was completed. 0 means active */ - @ColumnInfo(name = "completed") - public Long completed = 0L; - /** Unixtime Task was deleted. 0 means not deleted */ - @ColumnInfo(name = "deleted") - public Long deleted = 0L; - - // --- data access boilerplate - @ColumnInfo(name = "notes") - public String notes = ""; - - @ColumnInfo(name = "estimatedSeconds") - public Integer estimatedSeconds = 0; - - @ColumnInfo(name = "elapsedSeconds") - public Integer elapsedSeconds = 0; - - @ColumnInfo(name = "timerStart") - public Long timerStart = 0L; - /** Flags for when to send reminders */ - @ColumnInfo(name = "notificationFlags") - public Integer notificationFlags = 0; - /** Reminder period, in milliseconds. 0 means disabled */ - @ColumnInfo(name = "notifications") - public Long notifications = 0L; - - // --- parcelable helpers - /** Unixtime the last reminder was triggered */ - @ColumnInfo(name = "lastNotified") - public Long lastNotified = 0L; - - // --- data access methods - /** Unixtime snooze is set (0 -> no snooze) */ - @ColumnInfo(name = "snoozeTime") - public Long snoozeTime = 0L; - - @ColumnInfo(name = "recurrence") - public String recurrence = ""; - - @ColumnInfo(name = "repeatUntil") - public Long repeatUntil = 0L; - - @ColumnInfo(name = "calendarUri") - public String calendarUri = ""; - /** Remote id */ - @ColumnInfo(name = "remoteId") - public String remoteId = NO_UUID; - - @ColumnInfo(name = "collapsed") - public boolean collapsed; - - @ColumnInfo(name = "parent") - public transient long parent; - - @ColumnInfo(name = "parent_uuid") - public String parentUuid; - - // --- due and hide until date management - @Ignore private transient HashMap transitoryData = null; - - public Task() {} - - @Ignore - public Task(XmlReader reader) { - calendarUri = reader.readString("calendarUri"); - completed = reader.readLong("completed"); - created = reader.readLong("created"); - deleted = reader.readLong("deleted"); - dueDate = reader.readLong("dueDate"); - elapsedSeconds = reader.readInteger("elapsedSeconds"); - estimatedSeconds = reader.readInteger("estimatedSeconds"); - hideUntil = reader.readLong("hideUntil"); - priority = reader.readInteger("importance"); - modified = reader.readLong("modified"); - notes = reader.readString("notes"); - recurrence = reader.readString("recurrence"); - notificationFlags = reader.readInteger("notificationFlags"); - lastNotified = reader.readLong("lastNotified"); - notifications = reader.readLong("notifications"); - snoozeTime = reader.readLong("snoozeTime"); - repeatUntil = reader.readLong("repeatUntil"); - timerStart = reader.readLong("timerStart"); - title = reader.readString("title"); - remoteId = reader.readString("remoteId"); - } - - @Ignore - public Task(Parcel parcel) { - calendarUri = parcel.readString(); - completed = parcel.readLong(); - created = parcel.readLong(); - deleted = parcel.readLong(); - dueDate = parcel.readLong(); - elapsedSeconds = parcel.readInt(); - estimatedSeconds = parcel.readInt(); - hideUntil = parcel.readLong(); - id = parcel.readLong(); - priority = parcel.readInt(); - modified = parcel.readLong(); - notes = parcel.readString(); - recurrence = parcel.readString(); - notificationFlags = parcel.readInt(); - lastNotified = parcel.readLong(); - notifications = parcel.readLong(); - snoozeTime = parcel.readLong(); - repeatUntil = parcel.readLong(); - timerStart = parcel.readLong(); - title = parcel.readString(); - remoteId = parcel.readString(); - transitoryData = parcel.readHashMap(ContentValues.class.getClassLoader()); - collapsed = ParcelCompat.readBoolean(parcel); - parent = parcel.readLong(); - parentUuid = parcel.readString(); - } - - /** - * Creates due date for this task. If this due date has no time associated, we move it to the last - * millisecond of the day. - * - * @param setting one of the URGENCY_* constants - * @param customDate if specific day or day & time is set, this value - */ - public static long createDueDate(int setting, long customDate) { - long date; - - switch (setting) { - case URGENCY_NONE: - date = 0; - break; - case URGENCY_TODAY: - date = DateUtilities.now(); - break; - case URGENCY_TOMORROW: - date = DateUtilities.now() + DateUtilities.ONE_DAY; - break; - case URGENCY_DAY_AFTER: - date = DateUtilities.now() + 2 * DateUtilities.ONE_DAY; - break; - case URGENCY_NEXT_WEEK: - date = DateUtilities.now() + DateUtilities.ONE_WEEK; - break; - case URGENCY_IN_TWO_WEEKS: - date = DateUtilities.now() + 2 * DateUtilities.ONE_WEEK; - break; - case URGENCY_SPECIFIC_DAY: - case URGENCY_SPECIFIC_DAY_TIME: - date = customDate; - break; - default: - throw new IllegalArgumentException("Unknown setting " + setting); - } - - if (date <= 0) { - return date; - } - - DateTime dueDate = newDateTime(date).withMillisOfSecond(0); - if (setting != URGENCY_SPECIFIC_DAY_TIME) { - dueDate = - dueDate - .withHourOfDay(12) - .withMinuteOfHour(0) - .withSecondOfMinute(0); // Seconds == 0 means no due time - } else { - dueDate = dueDate.withSecondOfMinute(1); // Seconds > 0 means due time exists - } - return dueDate.getMillis(); - } - - /** Checks whether provided due date has a due time or only a date */ - public static boolean hasDueTime(long dueDate) { - return dueDate > 0 && (dueDate % 60000 > 0); - } - - public static boolean isValidUuid(String uuid) { - try { - long value = Long.parseLong(uuid); - return value > 0; - } catch (NumberFormatException e) { - Timber.e(e); - return isUuidEmpty(uuid); - } - } - - public static boolean isUuidEmpty(String uuid) { - return NO_UUID.equals(uuid) || isNullOrEmpty(uuid); - } - - public long getId() { - return id == null ? NO_ID : id; - } - - public void setId(long id) { - this.id = id; - } - - public String getUuid() { - return isNullOrEmpty(remoteId) ? NO_UUID : remoteId; - } - - public void setUuid(String uuid) { - remoteId = uuid; - } - - /** Checks whether task is done. Requires COMPLETION_DATE */ - public boolean isCompleted() { - return completed > 0; - } - - /** Checks whether task is deleted. Will return false if DELETION_DATE not read */ - public boolean isDeleted() { - return deleted > 0; - } - - /** Checks whether task is hidden. Requires HIDDEN_UNTIL */ - public boolean isHidden() { - return hideUntil > DateUtilities.now(); - } - - public boolean hasHideUntilDate() { - return hideUntil > 0; - } - - /** Checks whether task is done. Requires DUE_DATE */ - public boolean hasDueDate() { - return dueDate > 0; - } - - /** - * Create hide until for this task. - * - * @param setting one of the HIDE_UNTIL_* constants - * @param customDate if specific day is set, this value - */ - public long createHideUntil(int setting, long customDate) { - long date; - - switch (setting) { - case HIDE_UNTIL_NONE: - return 0; - case HIDE_UNTIL_DUE: - case HIDE_UNTIL_DUE_TIME: - date = dueDate; - break; - case HIDE_UNTIL_DAY_BEFORE: - date = dueDate - DateUtilities.ONE_DAY; - break; - case HIDE_UNTIL_WEEK_BEFORE: - date = dueDate - DateUtilities.ONE_WEEK; - break; - case HIDE_UNTIL_SPECIFIC_DAY: - case HIDE_UNTIL_SPECIFIC_DAY_TIME: - date = customDate; - break; - default: - throw new IllegalArgumentException("Unknown setting " + setting); - } - - if (date <= 0) { - return date; - } - - DateTime hideUntil = newDateTime(date).withMillisOfSecond(0); // get rid of millis - if (setting != HIDE_UNTIL_SPECIFIC_DAY_TIME && setting != HIDE_UNTIL_DUE_TIME) { - hideUntil = hideUntil.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0); - } else { - hideUntil = hideUntil.withSecondOfMinute(1); - } - return hideUntil.getMillis(); - } - - /** Checks whether this due date has a due time or only a date */ - public boolean hasDueTime() { - return hasDueDate() && hasDueTime(getDueDate()); - } - - public boolean isOverdue() { - long dueDate = getDueDate(); - long compareTo = hasDueTime() ? DateUtilities.now() : newDateTime().startOfDay().getMillis(); - - return dueDate < compareTo && !isCompleted(); - } - - public boolean repeatAfterCompletion() { - return getRecurrence().contains("FROM=COMPLETION"); - } - - public String sanitizedRecurrence() { - return getRecurrenceWithoutFrom().replaceAll("BYDAY=;", ""); // $NON-NLS-1$//$NON-NLS-2$ - } - - public String getRecurrenceWithoutFrom() { - return getRecurrence().replaceAll(";?FROM=[^;]*", ""); - } - - public Long getDueDate() { - return dueDate; - } - - public void setDueDate(Long dueDate) { - this.dueDate = dueDate; - } - - public void setDueDateAdjustingHideUntil(Long newDueDate) { - if (dueDate > 0) { - if (hideUntil > 0) { - setHideUntil(newDueDate > 0 ? hideUntil + newDueDate - dueDate : 0); - } - } - setDueDate(newDueDate); - } - - public boolean isRecurring() { - return !isNullOrEmpty(recurrence); - } - - public String getRecurrence() { - return recurrence; - } - - public void setRecurrence(String recurrence) { - this.recurrence = recurrence; - } - - public void setRecurrence(RRule rrule, boolean afterCompletion) { - setRecurrence(rrule.toIcal() + (afterCompletion ? ";FROM=COMPLETION" : "")); - } - - public Long getCreationDate() { - return created; - } - - public void setCreationDate(Long creationDate) { - created = creationDate; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Long getDeletionDate() { - return deleted; - } - - public void setDeletionDate(Long deletionDate) { - deleted = deletionDate; - } - - public Long getHideUntil() { - return hideUntil; - } - - public void setHideUntil(Long hideUntil) { - this.hideUntil = hideUntil; - } - - public Long getReminderLast() { - return lastNotified; - } - - public void setReminderLast(Long reminderLast) { - lastNotified = reminderLast; - } - - public Long getReminderSnooze() { - return snoozeTime; - } - - public void setReminderSnooze(Long reminderSnooze) { - snoozeTime = reminderSnooze; - } - - public Integer getElapsedSeconds() { - return elapsedSeconds; - } - - public void setElapsedSeconds(Integer elapsedSeconds) { - this.elapsedSeconds = elapsedSeconds; - } - - public Long getTimerStart() { - return timerStart; - } - - public void setTimerStart(Long timerStart) { - this.timerStart = timerStart; - } - - public Long getRepeatUntil() { - return repeatUntil; - } - - public void setRepeatUntil(Long repeatUntil) { - this.repeatUntil = repeatUntil; - } - - public String getCalendarURI() { - return calendarUri; - } - - public @Priority Integer getPriority() { - return priority; - } - - public void setPriority(@Priority Integer priority) { - this.priority = priority; - } - - public Long getCompletionDate() { - return completed; - } - - public void setCompletionDate(Long completionDate) { - completed = completionDate; - } - - public String getNotes() { - return notes; - } - - public void setNotes(String notes) { - this.notes = notes; - } - - public boolean hasNotes() { - return !isNullOrEmpty(notes); - } - - public Long getModificationDate() { - return modified; - } - - public void setModificationDate(Long modificationDate) { - modified = modificationDate; - } - - public Integer getReminderFlags() { - return notificationFlags; - } - - public void setReminderFlags(Integer reminderFlags) { - notificationFlags = reminderFlags; - } - - public Long getReminderPeriod() { - return notifications; - } - - public void setReminderPeriod(Long reminderPeriod) { - notifications = reminderPeriod; - } - - public Integer getEstimatedSeconds() { - return estimatedSeconds; - } - - public void setEstimatedSeconds(Integer estimatedSeconds) { - this.estimatedSeconds = estimatedSeconds; - } - - public void setCalendarUri(String calendarUri) { - this.calendarUri = calendarUri; - } - - public long getParent() { - return parent; - } - - public void setParent(long parent) { - this.parent = parent; - } - - public String getParentUuid() { - return parentUuid; - } - - public void setParentUuid(String parentUuid) { - this.parentUuid = parentUuid; - } - - public boolean isNotifyModeNonstop() { - return isReminderFlagSet(Task.NOTIFY_MODE_NONSTOP); - } - - public boolean isNotifyModeFive() { - return isReminderFlagSet(Task.NOTIFY_MODE_FIVE); - } - - public boolean isNotifyAfterDeadline() { - return isReminderFlagSet(Task.NOTIFY_AFTER_DEADLINE); - } - - public boolean isNotifyAtDeadline() { - return isReminderFlagSet(Task.NOTIFY_AT_DEADLINE); - } - - private boolean isReminderFlagSet(int flag) { - return (notificationFlags & flag) > 0; - } - - public boolean isNew() { - return getId() == NO_ID; - } - - public boolean isCollapsed() { - return collapsed; - } - - /** {@inheritDoc} */ - @Override - public int describeContents() { - return 0; - } - - /** {@inheritDoc} */ - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(calendarUri); - dest.writeLong(completed); - dest.writeLong(created); - dest.writeLong(deleted); - dest.writeLong(dueDate); - dest.writeInt(elapsedSeconds); - dest.writeInt(estimatedSeconds); - dest.writeLong(hideUntil); - dest.writeLong(id); - dest.writeInt(priority); - dest.writeLong(modified); - dest.writeString(notes); - dest.writeString(recurrence); - dest.writeInt(notificationFlags); - dest.writeLong(lastNotified); - dest.writeLong(notifications); - dest.writeLong(snoozeTime); - dest.writeLong(repeatUntil); - dest.writeLong(timerStart); - dest.writeString(title); - dest.writeString(remoteId); - dest.writeMap(transitoryData); - ParcelCompat.writeBoolean(dest, collapsed); - dest.writeLong(parent); - dest.writeString(parentUuid); - } - - @Override - public String toString() { - return "Task{" - + "id=" - + id - + ", title='" - + title - + '\'' - + ", priority=" - + priority - + ", dueDate=" - + dueDate - + ", hideUntil=" - + hideUntil - + ", created=" - + created - + ", modified=" - + modified - + ", completed=" - + completed - + ", deleted=" - + deleted - + ", notes='" - + notes - + '\'' - + ", estimatedSeconds=" - + estimatedSeconds - + ", elapsedSeconds=" - + elapsedSeconds - + ", timerStart=" - + timerStart - + ", notificationFlags=" - + notificationFlags - + ", notifications=" - + notifications - + ", lastNotified=" - + lastNotified - + ", snoozeTime=" - + snoozeTime - + ", recurrence='" - + recurrence - + '\'' - + ", repeatUntil=" - + repeatUntil - + ", calendarUri='" - + calendarUri - + '\'' - + ", remoteId='" - + remoteId - + '\'' - + ", collapsed=" - + collapsed - + ", parent=" - + parent - + ", parentUuid='" - + parentUuid - + '\'' - + ", transitoryData=" - + transitoryData - + '}'; - } - - public boolean insignificantChange(Task task) { - if (this == task) { - return true; - } - if (task == null) { - return false; - } - - return Objects.equals(id, task.id) - && Objects.equals(title, task.title) - && Objects.equals(priority, task.priority) - && Objects.equals(dueDate, task.dueDate) - && Objects.equals(hideUntil, task.hideUntil) - && Objects.equals(created, task.created) - && Objects.equals(modified, task.modified) - && Objects.equals(completed, task.completed) - && Objects.equals(deleted, task.deleted) - && Objects.equals(notes, task.notes) - && Objects.equals(estimatedSeconds, task.estimatedSeconds) - && Objects.equals(elapsedSeconds, task.elapsedSeconds) - && Objects.equals(notificationFlags, task.notificationFlags) - && Objects.equals(notifications, task.notifications) - && Objects.equals(recurrence, task.recurrence) - && Objects.equals(repeatUntil, task.repeatUntil) - && Objects.equals(calendarUri, task.calendarUri) - && parent == task.parent - && Objects.equals(parentUuid, task.parentUuid) - && Objects.equals(remoteId, task.remoteId); - } - - public boolean googleTaskUpToDate(Task original) { - if (this == original) { - return true; - } - if (original == null) { - return false; - } - - return Objects.equals(title, original.title) - && Objects.equals(dueDate, original.dueDate) - && Objects.equals(completed, original.completed) - && Objects.equals(deleted, original.deleted) - && parent == original.parent - && Objects.equals(notes, original.notes); - } - - public boolean caldavUpToDate(Task original) { - if (this == original) { - return true; - } - if (original == null) { - return false; - } - - return Objects.equals(title, original.title) - && Objects.equals(priority, original.priority) - && Objects.equals(dueDate, original.dueDate) - && Objects.equals(completed, original.completed) - && Objects.equals(deleted, original.deleted) - && Objects.equals(notes, original.notes) - && Objects.equals(recurrence, original.recurrence) - && parent == original.parent - && Objects.equals(repeatUntil, original.repeatUntil); - } - - public boolean isSaved() { - return getId() != NO_ID; - } - - public synchronized void suppressSync() { - putTransitory(SUPPRESS_SYNC, true); - } - - public synchronized void suppressRefresh() { - putTransitory(TaskDao.TRANS_SUPPRESS_REFRESH, true); - } - - public synchronized void putTransitory(String key, Object value) { - if (transitoryData == null) { - transitoryData = new HashMap<>(); - } - transitoryData.put(key, value); - } - - public ArrayList getTags() { - Object tags = getTransitory(Tag.KEY); - return tags == null ? new ArrayList<>() : (ArrayList) tags; - } - - public void setTags(ArrayList tags) { - if (transitoryData == null) { - transitoryData = new HashMap<>(); - } - transitoryData.put(Tag.KEY, tags); - } - - public boolean hasTransitory(String key) { - return transitoryData != null && transitoryData.containsKey(key); - } - - public T getTransitory(String key) { - if (transitoryData == null) { - return null; - } - return (T) transitoryData.get(key); - } - - // --- Convenience wrappers for using transitories as flags - public boolean checkTransitory(String flag) { - Object trans = getTransitory(flag); - return trans != null; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof Task)) { - return false; - } - Task task = (Task) o; - return collapsed == task.collapsed - && parent == task.parent - && Objects.equals(id, task.id) - && Objects.equals(title, task.title) - && Objects.equals(priority, task.priority) - && Objects.equals(dueDate, task.dueDate) - && Objects.equals(hideUntil, task.hideUntil) - && Objects.equals(created, task.created) - && Objects.equals(modified, task.modified) - && Objects.equals(completed, task.completed) - && Objects.equals(deleted, task.deleted) - && Objects.equals(notes, task.notes) - && Objects.equals(estimatedSeconds, task.estimatedSeconds) - && Objects.equals(elapsedSeconds, task.elapsedSeconds) - && Objects.equals(timerStart, task.timerStart) - && Objects.equals(notificationFlags, task.notificationFlags) - && Objects.equals(notifications, task.notifications) - && Objects.equals(lastNotified, task.lastNotified) - && Objects.equals(snoozeTime, task.snoozeTime) - && Objects.equals(recurrence, task.recurrence) - && Objects.equals(repeatUntil, task.repeatUntil) - && Objects.equals(calendarUri, task.calendarUri) - && Objects.equals(remoteId, task.remoteId) - && Objects.equals(parentUuid, task.parentUuid) - && Objects.equals(transitoryData, task.transitoryData); - } - - @Override - public int hashCode() { - return Objects - .hash(id, title, priority, dueDate, hideUntil, created, modified, completed, deleted, notes, - estimatedSeconds, elapsedSeconds, timerStart, notificationFlags, notifications, - lastNotified, snoozeTime, recurrence, repeatUntil, calendarUri, remoteId, collapsed, - parent, parentUuid, transitoryData); - } - - @Retention(SOURCE) - @IntDef({Priority.HIGH, Priority.MEDIUM, Priority.LOW, Priority.NONE}) - public @interface Priority { - int HIGH = 0; - int MEDIUM = 1; - int LOW = 2; - int NONE = 3; - } -} diff --git a/app/src/main/java/com/todoroo/astrid/data/Task.kt b/app/src/main/java/com/todoroo/astrid/data/Task.kt new file mode 100644 index 000000000..1d258e337 --- /dev/null +++ b/app/src/main/java/com/todoroo/astrid/data/Task.kt @@ -0,0 +1,618 @@ +package com.todoroo.astrid.data + +import android.content.ContentValues +import android.os.Parcel +import android.os.Parcelable +import androidx.annotation.IntDef +import androidx.core.os.ParcelCompat +import androidx.room.* +import com.google.ical.values.RRule +import com.todoroo.andlib.data.Property.* +import com.todoroo.andlib.data.Table +import com.todoroo.andlib.sql.Field +import com.todoroo.andlib.utility.DateUtilities +import com.todoroo.astrid.dao.TaskDao +import org.tasks.Strings +import org.tasks.backup.XmlReader +import org.tasks.data.Tag +import org.tasks.date.DateTimeUtils +import timber.log.Timber +import java.util.* + +@Entity( + tableName = "tasks", + indices = [ + Index(name = "t_rid", value = ["remoteId"], unique = true), + Index(name = "active_and_visible", value = ["completed", "deleted", "hideUntil"])]) +open class Task : Parcelable { + /** ID */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "_id") + @Transient + var id: Long? = NO_ID + + /** Name of Task */ + @ColumnInfo(name = "title") + var title: String? = "" + + @ColumnInfo(name = "importance") + var priority: Int? = Priority.NONE + + /** Unixtime Task is due, 0 if not set */ + @ColumnInfo(name = "dueDate") + var dueDate: Long? = 0L + + /** Unixtime Task should be hidden until, 0 if not set */ + @ColumnInfo(name = "hideUntil") + var hideUntil: Long? = 0L + + /** Unixtime Task was created */ + @ColumnInfo(name = "created") + var creationDate: Long? = 0L + + /** Unixtime Task was last touched */ + @ColumnInfo(name = "modified") + var modificationDate: Long? = 0L + + /** Unixtime Task was completed. 0 means active */ + @ColumnInfo(name = "completed") + var completionDate: Long? = 0L + + /** Unixtime Task was deleted. 0 means not deleted */ + @ColumnInfo(name = "deleted") + var deletionDate: Long? = 0L + + // --- data access boilerplate + @ColumnInfo(name = "notes") + var notes: String? = "" + + @ColumnInfo(name = "estimatedSeconds") + var estimatedSeconds: Int? = 0 + + @ColumnInfo(name = "elapsedSeconds") + var elapsedSeconds: Int? = 0 + + @ColumnInfo(name = "timerStart") + var timerStart: Long? = 0L + + /** Flags for when to send reminders */ + @ColumnInfo(name = "notificationFlags") + var reminderFlags: Int? = 0 + + /** Reminder period, in milliseconds. 0 means disabled */ + @ColumnInfo(name = "notifications") + var reminderPeriod: Long? = 0L + // --- parcelable helpers + /** Unixtime the last reminder was triggered */ + @ColumnInfo(name = "lastNotified") + var reminderLast: Long? = 0L + // --- data access methods + /** Unixtime snooze is set (0 -> no snooze) */ + @ColumnInfo(name = "snoozeTime") + var reminderSnooze: Long? = 0L + + @ColumnInfo(name = "recurrence") + var recurrence: String? = "" + + @ColumnInfo(name = "repeatUntil") + var repeatUntil: Long? = 0L + + @ColumnInfo(name = "calendarUri") + var calendarURI: String? = "" + + /** Remote id */ + @ColumnInfo(name = "remoteId") + var remoteId: String? = NO_UUID + + @ColumnInfo(name = "collapsed") + var isCollapsed = false + + @ColumnInfo(name = "parent") + @Transient + var parent: Long = 0 + + @ColumnInfo(name = "parent_uuid") + var parentUuid: String? = null + + @Ignore + @Transient + private var transitoryData: HashMap? = null + + constructor() + + @Ignore + constructor(reader: XmlReader) { + calendarURI = reader.readString("calendarUri") + completionDate = reader.readLong("completed") + creationDate = reader.readLong("created") + deletionDate = reader.readLong("deleted") + dueDate = reader.readLong("dueDate") + elapsedSeconds = reader.readInteger("elapsedSeconds") + estimatedSeconds = reader.readInteger("estimatedSeconds") + hideUntil = reader.readLong("hideUntil") + priority = reader.readInteger("importance") + modificationDate = reader.readLong("modified") + notes = reader.readString("notes") + recurrence = reader.readString("recurrence") + reminderFlags = reader.readInteger("notificationFlags") + reminderLast = reader.readLong("lastNotified") + reminderPeriod = reader.readLong("notifications") + reminderSnooze = reader.readLong("snoozeTime") + repeatUntil = reader.readLong("repeatUntil") + timerStart = reader.readLong("timerStart") + title = reader.readString("title") + remoteId = reader.readString("remoteId") + } + + @Ignore + constructor(parcel: Parcel) { + calendarURI = parcel.readString() + completionDate = parcel.readLong() + creationDate = parcel.readLong() + deletionDate = parcel.readLong() + dueDate = parcel.readLong() + elapsedSeconds = parcel.readInt() + estimatedSeconds = parcel.readInt() + hideUntil = parcel.readLong() + id = parcel.readLong() + priority = parcel.readInt() + modificationDate = parcel.readLong() + notes = parcel.readString() + recurrence = parcel.readString() + reminderFlags = parcel.readInt() + reminderLast = parcel.readLong() + reminderPeriod = parcel.readLong() + reminderSnooze = parcel.readLong() + repeatUntil = parcel.readLong() + timerStart = parcel.readLong() + title = parcel.readString() + remoteId = parcel.readString() + transitoryData = parcel.readHashMap(ContentValues::class.java.classLoader) as HashMap? + isCollapsed = ParcelCompat.readBoolean(parcel) + parent = parcel.readLong() + parentUuid = parcel.readString() + } + + var uuid: String? + get() = if (Strings.isNullOrEmpty(remoteId)) NO_UUID else remoteId + set(uuid) { + remoteId = uuid + } + + /** Checks whether task is done. Requires COMPLETION_DATE */ + val isCompleted + get() = completionDate!! > 0 + + /** Checks whether task is deleted. Will return false if DELETION_DATE not read */ + val isDeleted + get() = deletionDate!! > 0 + + /** Checks whether task is hidden. Requires HIDDEN_UNTIL */ + val isHidden + get() = hideUntil!! > DateUtilities.now() + + fun hasHideUntilDate() = hideUntil!! > 0 + + /** Checks whether task is done. Requires DUE_DATE */ + fun hasDueDate() = dueDate!! > 0 + + /** + * Create hide until for this task. + * + * @param setting one of the HIDE_UNTIL_* constants + * @param customDate if specific day is set, this value + */ + fun createHideUntil(setting: Int, customDate: Long): Long { + val date: Long = when (setting) { + HIDE_UNTIL_NONE -> return 0 + HIDE_UNTIL_DUE, HIDE_UNTIL_DUE_TIME -> dueDate!! + HIDE_UNTIL_DAY_BEFORE -> dueDate!! - DateUtilities.ONE_DAY + HIDE_UNTIL_WEEK_BEFORE -> dueDate!! - DateUtilities.ONE_WEEK + HIDE_UNTIL_SPECIFIC_DAY, HIDE_UNTIL_SPECIFIC_DAY_TIME -> customDate + else -> throw IllegalArgumentException("Unknown setting $setting") + } + if (date <= 0) { + return date + } + var hideUntil = DateTimeUtils.newDateTime(date).withMillisOfSecond(0) // get rid of millis + hideUntil = if (setting != HIDE_UNTIL_SPECIFIC_DAY_TIME && setting != HIDE_UNTIL_DUE_TIME) { + hideUntil.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0) + } else { + hideUntil.withSecondOfMinute(1) + } + return hideUntil.millis + } + + /** Checks whether this due date has a due time or only a date */ + fun hasDueTime(): Boolean = hasDueDate() && hasDueTime(dueDate!!) + + val isOverdue: Boolean + get() { + val dueDate = dueDate + val compareTo = if (hasDueTime()) DateUtilities.now() else DateTimeUtils.newDateTime().startOfDay().millis + return dueDate!! < compareTo && !isCompleted + } + + fun repeatAfterCompletion(): Boolean = recurrence!!.contains("FROM=COMPLETION") + + fun sanitizedRecurrence(): String = getRecurrenceWithoutFrom().replace("BYDAY=;".toRegex(), "") // $NON-NLS-1$//$NON-NLS-2$ + + fun getRecurrenceWithoutFrom(): String = recurrence!!.replace(";?FROM=[^;]*".toRegex(), "") + + fun setDueDateAdjustingHideUntil(newDueDate: Long) { + if (dueDate!! > 0) { + if (hideUntil!! > 0) { + hideUntil = if (newDueDate > 0) hideUntil!! + newDueDate - dueDate!! else 0 + } + } + dueDate = newDueDate + } + + val isRecurring: Boolean + get() = !Strings.isNullOrEmpty(recurrence) + + fun setRecurrence(rrule: RRule, afterCompletion: Boolean) { + recurrence = rrule.toIcal() + if (afterCompletion) ";FROM=COMPLETION" else "" + } + + fun hasNotes(): Boolean { + return !Strings.isNullOrEmpty(notes) + } + + fun setCalendarUri(calendarUri: String?) { + calendarURI = calendarUri + } + + val isNotifyModeNonstop: Boolean + get() = isReminderFlagSet(NOTIFY_MODE_NONSTOP) + + val isNotifyModeFive: Boolean + get() = isReminderFlagSet(NOTIFY_MODE_FIVE) + + val isNotifyAfterDeadline: Boolean + get() = isReminderFlagSet(NOTIFY_AFTER_DEADLINE) + + val isNotifyAtDeadline: Boolean + get() = isReminderFlagSet(NOTIFY_AT_DEADLINE) + + private fun isReminderFlagSet(flag: Int): Boolean { + return reminderFlags!! and flag > 0 + } + + val isNew: Boolean + get() = id == NO_ID + + /** {@inheritDoc} */ + override fun describeContents() = 0 + + /** {@inheritDoc} */ + override fun writeToParcel(dest: Parcel, flags: Int) { + dest.writeString(calendarURI) + dest.writeLong(completionDate!!) + dest.writeLong(creationDate!!) + dest.writeLong(deletionDate!!) + dest.writeLong(dueDate!!) + dest.writeInt(elapsedSeconds!!) + dest.writeInt(estimatedSeconds!!) + dest.writeLong(hideUntil!!) + dest.writeLong(id!!) + dest.writeInt(priority!!) + dest.writeLong(modificationDate!!) + dest.writeString(notes) + dest.writeString(recurrence) + dest.writeInt(reminderFlags!!) + dest.writeLong(reminderLast!!) + dest.writeLong(reminderPeriod!!) + dest.writeLong(reminderSnooze!!) + dest.writeLong(repeatUntil!!) + dest.writeLong(timerStart!!) + dest.writeString(title) + dest.writeString(remoteId) + dest.writeMap(transitoryData as Map<*, *>?) + ParcelCompat.writeBoolean(dest, isCollapsed) + dest.writeLong(parent) + dest.writeString(parentUuid) + } + + fun insignificantChange(task: Task?): Boolean { + if (this === task) { + return true + } + return if (task == null) { + false + } else id == task.id + && title == task.title + && priority == task.priority + && dueDate == task.dueDate + && hideUntil == task.hideUntil + && creationDate == task.creationDate + && modificationDate == task.modificationDate + && completionDate == task.completionDate + && deletionDate == task.deletionDate + && notes == task.notes + && estimatedSeconds == task.estimatedSeconds + && elapsedSeconds == task.elapsedSeconds + && reminderFlags == task.reminderFlags + && reminderPeriod == task.reminderPeriod + && recurrence == task.recurrence + && repeatUntil == task.repeatUntil + && calendarURI == task.calendarURI + && parent == task.parent && parentUuid == task.parentUuid + && remoteId == task.remoteId + } + + fun googleTaskUpToDate(original: Task?): Boolean { + if (this === original) { + return true + } + return if (original == null) { + false + } else title == original.title + && dueDate == original.dueDate + && completionDate == original.completionDate + && deletionDate == original.deletionDate + && parent == original.parent && notes == original.notes + } + + fun caldavUpToDate(original: Task?): Boolean { + if (this === original) { + return true + } + return if (original == null) { + false + } else title == original.title + && priority == original.priority + && dueDate == original.dueDate + && completionDate == original.completionDate + && deletionDate == original.deletionDate + && notes == original.notes + && recurrence == original.recurrence + && parent == original.parent && repeatUntil == original.repeatUntil + } + + val isSaved: Boolean + get() = id != NO_ID + + @Synchronized + fun suppressSync() { + putTransitory(SyncFlags.SUPPRESS_SYNC, true) + } + + @Synchronized + fun suppressRefresh() { + putTransitory(TaskDao.TRANS_SUPPRESS_REFRESH, true) + } + + @Synchronized + fun putTransitory(key: String, value: Any) { + if (transitoryData == null) { + transitoryData = HashMap() + } + transitoryData!![key] = value + } + + val tags: ArrayList + get() { + return getTransitory(Tag.KEY) ?: ArrayList() + } + + fun setTags(tags: ArrayList) { + if (transitoryData == null) { + transitoryData = HashMap() + } + transitoryData!![Tag.KEY] = tags + } + + fun hasTransitory(key: String?): Boolean { + return transitoryData != null && transitoryData!!.containsKey(key) + } + + fun getTransitory(key: String?): T? { + return if (transitoryData == null) { + null + } else transitoryData!![key] as T? + } + + // --- Convenience wrappers for using transitories as flags + fun checkTransitory(flag: String?): Boolean { + val trans = getTransitory(flag) + return trans != null + } + + override fun toString(): String { + return "Task(id=$id, title=$title, dueDate=$dueDate, hideUntil=$hideUntil, creationDate=$creationDate, modificationDate=$modificationDate, completionDate=$completionDate, deletionDate=$deletionDate, notes=$notes, estimatedSeconds=$estimatedSeconds, elapsedSeconds=$elapsedSeconds, timerStart=$timerStart, reminderFlags=$reminderFlags, reminderPeriod=$reminderPeriod, reminderLast=$reminderLast, reminderSnooze=$reminderSnooze, recurrence=$recurrence, repeatUntil=$repeatUntil, calendarURI=$calendarURI, remoteId=$remoteId, isCollapsed=$isCollapsed, parent=$parent, parentUuid=$parentUuid, transitoryData=$transitoryData)" + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is Task) return false + + if (id != other.id) return false + if (title != other.title) return false + if (dueDate != other.dueDate) return false + if (hideUntil != other.hideUntil) return false + if (creationDate != other.creationDate) return false + if (modificationDate != other.modificationDate) return false + if (completionDate != other.completionDate) return false + if (deletionDate != other.deletionDate) return false + if (notes != other.notes) return false + if (estimatedSeconds != other.estimatedSeconds) return false + if (elapsedSeconds != other.elapsedSeconds) return false + if (timerStart != other.timerStart) return false + if (reminderFlags != other.reminderFlags) return false + if (reminderPeriod != other.reminderPeriod) return false + if (reminderLast != other.reminderLast) return false + if (reminderSnooze != other.reminderSnooze) return false + if (recurrence != other.recurrence) return false + if (repeatUntil != other.repeatUntil) return false + if (calendarURI != other.calendarURI) return false + if (remoteId != other.remoteId) return false + if (isCollapsed != other.isCollapsed) return false + if (parent != other.parent) return false + if (parentUuid != other.parentUuid) return false + if (transitoryData != other.transitoryData) return false + + return true + } + + override fun hashCode(): Int { + var result = id?.hashCode() ?: 0 + result = 31 * result + (title?.hashCode() ?: 0) + result = 31 * result + dueDate.hashCode() + result = 31 * result + hideUntil.hashCode() + result = 31 * result + creationDate.hashCode() + result = 31 * result + modificationDate.hashCode() + result = 31 * result + completionDate.hashCode() + result = 31 * result + deletionDate.hashCode() + result = 31 * result + (notes?.hashCode() ?: 0) + result = 31 * result + estimatedSeconds!! + result = 31 * result + elapsedSeconds!! + result = 31 * result + timerStart.hashCode() + result = 31 * result + reminderFlags!! + result = 31 * result + reminderPeriod.hashCode() + result = 31 * result + reminderLast.hashCode() + result = 31 * result + reminderSnooze.hashCode() + result = 31 * result + (recurrence?.hashCode() ?: 0) + result = 31 * result + repeatUntil.hashCode() + result = 31 * result + (calendarURI?.hashCode() ?: 0) + result = 31 * result + (remoteId?.hashCode() ?: 0) + result = 31 * result + isCollapsed.hashCode() + result = 31 * result + parent.hashCode() + result = 31 * result + (parentUuid?.hashCode() ?: 0) + result = 31 * result + (transitoryData?.hashCode() ?: 0) + return result + } + + @Retention(AnnotationRetention.SOURCE) + @IntDef(Priority.HIGH, Priority.MEDIUM, Priority.LOW, Priority.NONE) + annotation class Priority { + companion object { + const val HIGH = 0 + const val MEDIUM = 1 + const val LOW = 2 + const val NONE = 3 + } + } + + companion object { + // --- table and uri + /** table for this model */ + @JvmField val TABLE = Table("tasks") + @JvmField val FIELDS = Field.field("tasks.*") + const val NO_ID: Long = 0 + + // --- properties + @JvmField val ID = LongProperty(TABLE, "_id") + @JvmField val TITLE = StringProperty(TABLE, "title") + @JvmField val IMPORTANCE = IntegerProperty(TABLE, "importance") + @JvmField val DUE_DATE = LongProperty(TABLE, "dueDate") + @JvmField val HIDE_UNTIL = LongProperty(TABLE, "hideUntil") + @JvmField val MODIFICATION_DATE = LongProperty(TABLE, "modified") + @JvmField val CREATION_DATE = LongProperty(TABLE, "created") + @JvmField val COMPLETION_DATE = LongProperty(TABLE, "completed") + @JvmField val DELETION_DATE = LongProperty(TABLE, "deleted") + @JvmField val NOTES = StringProperty(TABLE, "notes") + @JvmField val TIMER_START = LongProperty(TABLE, "timerStart") + @JvmField val PARENT = LongProperty(TABLE, "parent") + + /** constant value for no uuid */ + const val NO_UUID = "0" // $NON-NLS-1$ + @JvmField val UUID = StringProperty(TABLE, "remoteId") + + /** whether to send a reminder at deadline */ + const val NOTIFY_AT_DEADLINE = 1 shl 1 + + /** whether to send reminders while task is overdue */ + const val NOTIFY_AFTER_DEADLINE = 1 shl 2 + + /** reminder mode non-stop */ + const val NOTIFY_MODE_NONSTOP = 1 shl 3 + + /** reminder mode five times (exclusive with non-stop) */ + const val NOTIFY_MODE_FIVE = 1 shl 4 + @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { + override fun createFromParcel(source: Parcel): Task? { + return Task(source) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } + + /** urgency array index -> significance */ + const val URGENCY_NONE = 0 + const val URGENCY_SPECIFIC_DAY = 7 + const val URGENCY_SPECIFIC_DAY_TIME = 8 + + /** hide until array index -> significance */ + const val HIDE_UNTIL_NONE = 0 + const val HIDE_UNTIL_DUE = 1 + const val HIDE_UNTIL_DAY_BEFORE = 2 + const val HIDE_UNTIL_WEEK_BEFORE = 3 + const val HIDE_UNTIL_SPECIFIC_DAY = 4 + + // --- for astrid.com + const val HIDE_UNTIL_SPECIFIC_DAY_TIME = 5 + const val HIDE_UNTIL_DUE_TIME = 6 + const val URGENCY_TODAY = 1 + const val URGENCY_TOMORROW = 2 + + // --- notification flags + const val URGENCY_DAY_AFTER = 3 + const val URGENCY_NEXT_WEEK = 4 + const val URGENCY_IN_TWO_WEEKS = 5 + + /** + * Creates due date for this task. If this due date has no time associated, we move it to the last + * millisecond of the day. + * + * @param setting one of the URGENCY_* constants + * @param customDate if specific day or day & time is set, this value + */ + @JvmStatic fun createDueDate(setting: Int, customDate: Long): Long { + val date: Long = when (setting) { + URGENCY_NONE -> 0 + URGENCY_TODAY -> DateUtilities.now() + URGENCY_TOMORROW -> DateUtilities.now() + DateUtilities.ONE_DAY + URGENCY_DAY_AFTER -> DateUtilities.now() + 2 * DateUtilities.ONE_DAY + URGENCY_NEXT_WEEK -> DateUtilities.now() + DateUtilities.ONE_WEEK + URGENCY_IN_TWO_WEEKS -> DateUtilities.now() + 2 * DateUtilities.ONE_WEEK + URGENCY_SPECIFIC_DAY, URGENCY_SPECIFIC_DAY_TIME -> customDate + else -> throw IllegalArgumentException("Unknown setting $setting") + } + if (date <= 0) { + return date + } + var dueDate = DateTimeUtils.newDateTime(date).withMillisOfSecond(0) + dueDate = if (setting != URGENCY_SPECIFIC_DAY_TIME) { + dueDate + .withHourOfDay(12) + .withMinuteOfHour(0) + .withSecondOfMinute(0) // Seconds == 0 means no due time + } else { + dueDate.withSecondOfMinute(1) // Seconds > 0 means due time exists + } + return dueDate.millis + } + + /** Checks whether provided due date has a due time or only a date */ + @JvmStatic fun hasDueTime(dueDate: Long): Boolean { + return dueDate > 0 && dueDate % 60000 > 0 + } + + @JvmStatic fun isValidUuid(uuid: String): Boolean { + return try { + val value = uuid.toLong() + value > 0 + } catch (e: NumberFormatException) { + Timber.e(e) + isUuidEmpty(uuid) + } + } + + @JvmStatic fun isUuidEmpty(uuid: String?): Boolean { + return NO_UUID == uuid || Strings.isNullOrEmpty(uuid) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.java b/app/src/main/java/com/todoroo/astrid/service/TaskMover.java index 4171e6db2..713be6ced 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.java +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.java @@ -189,7 +189,7 @@ public class TaskMover { tasks.put(id, new CaldavTask(id, listId)); for (Task child : taskDao.fetchChildren(task.getId())) { CaldavTask newTask = new CaldavTask(child.getId(), listId); - newTask.setRemoteParent(tasks.get(child.parent).getRemoteId()); + newTask.setRemoteParent(tasks.get(child.getParent()).getRemoteId()); tasks.put(child.getId(), newTask); } caldavDao.insert(tasks.values()); diff --git a/app/src/main/java/org/tasks/caldav/iCalendar.kt b/app/src/main/java/org/tasks/caldav/iCalendar.kt index 6711e6d37..acd3cae63 100644 --- a/app/src/main/java/org/tasks/caldav/iCalendar.kt +++ b/app/src/main/java/org/tasks/caldav/iCalendar.kt @@ -114,7 +114,7 @@ class iCalendar @Inject constructor( val remoteModel = CaldavConverter.toCaldav(caldavTask, task) val categories = remoteModel.categories categories.clear() - categories.addAll(tagDataDao.getTagDataForTask(task.getId()).map { it.name!! }) + categories.addAll(tagDataDao.getTagDataForTask(task.id!!).map { it.name!! }) if (isNullOrEmpty(caldavTask.remoteId)) { val caldavUid = UUIDHelper.newUUID() caldavTask.remoteId = caldavUid @@ -122,7 +122,7 @@ class iCalendar @Inject constructor( } else { remoteModel.uid = caldavTask.remoteId } - val location = locationDao.getGeofences(task.getId()) + val location = locationDao.getGeofences(task.id!!) val localGeo = toGeo(location) if (localGeo == null || !localGeo.equalish(remoteModel.geoPosition)) { remoteModel.geoPosition = localGeo @@ -145,7 +145,7 @@ class iCalendar @Inject constructor( if (existing == null) { task = taskCreator.createWithValues("") taskDao.createNew(task) - caldavTask = CaldavTask(task.getId(), calendar.uuid, remote.uid, obj) + caldavTask = CaldavTask(task.id!!, calendar.uuid, remote.uid, obj) } else { task = taskDao.fetch(existing.task)!! caldavTask = existing @@ -153,12 +153,12 @@ class iCalendar @Inject constructor( CaldavConverter.apply(task, remote) val geo = remote.geoPosition if (geo == null) { - locationDao.getActiveGeofences(task.getId()).forEach { + locationDao.getActiveGeofences(task.id!!).forEach { locationDao.delete(it.geofence) geofenceApi.update(it.place) } } else { - setPlace(task.getId(), geo) + setPlace(task.id!!, geo) } tagDao.applyTags(task, tagDataDao, getTags(remote.categories)) task.suppressSync() diff --git a/app/src/main/java/org/tasks/data/Tag.kt b/app/src/main/java/org/tasks/data/Tag.kt index ad785d87c..558c92f54 100644 --- a/app/src/main/java/org/tasks/data/Tag.kt +++ b/app/src/main/java/org/tasks/data/Tag.kt @@ -34,7 +34,7 @@ class Tag { constructor(task: Task, tagData: TagData) : this(task, tagData.name, tagData.remoteId) @Ignore - constructor(task: Task, name: String?, tagUid: String?) : this(task.getId(), task.uuid, name, tagUid) + constructor(task: Task, name: String?, tagUid: String?) : this(task.id!!, task.uuid, name, tagUid) @Ignore constructor(taskId: Long, taskUid: String?, name: String?, tagUid: String?) { diff --git a/app/src/main/java/org/tasks/data/TagDao.kt b/app/src/main/java/org/tasks/data/TagDao.kt index 9ffe39bab..d02e9ba2f 100644 --- a/app/src/main/java/org/tasks/data/TagDao.kt +++ b/app/src/main/java/org/tasks/data/TagDao.kt @@ -34,7 +34,7 @@ abstract class TagDao { @Transaction open fun applyTags(task: Task, tagDataDao: TagDataDao, current: List): Boolean { - val taskId = task.getId() + val taskId = task.id!! val existing = HashSet(tagDataDao.getTagDataForTask(taskId)) val selected = HashSet(current) val added = selected subtract existing diff --git a/app/src/main/java/org/tasks/data/TagDataDao.kt b/app/src/main/java/org/tasks/data/TagDataDao.kt index 09aa437fa..9c19f66f7 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.kt +++ b/app/src/main/java/org/tasks/data/TagDataDao.kt @@ -89,14 +89,14 @@ abstract class TagDataDao { val modified = HashSet() val keep = partiallySelected.plus(selected).map { it.remoteId!! } for (sublist in tasks.chunked(DbUtils.MAX_SQLITE_ARGS - keep.size)) { - val tags = tagsToDelete(sublist.map(Task::id), keep) + val tags = tagsToDelete(sublist.map { it.id!! }, keep) deleteTags(tags) modified.addAll(tags.map(Tag::task)) } for (task in tasks) { - val added = selected subtract getTagDataForTask(task.getId()) + val added = selected subtract getTagDataForTask(task.id!!) if (added.isNotEmpty()) { - modified.add(task.getId()) + modified.add(task.id!!) insert(added.map { Tag(task, it) }) } } diff --git a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt index 66afdbcb2..4c2c28879 100644 --- a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt @@ -240,7 +240,7 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() { if (taskId > 0) { val task: Task = taskDao.fetch(taskId)!! if (newDateTime(dueDate).isAfterNow) { - notificationManager.cancel(task.getId()) + notificationManager.cancel(task.id!!) } task.setDueDateAdjustingHideUntil(dueDate) taskDao.save(task) diff --git a/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt b/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt index 2bba3fcd7..821f0fb1b 100644 --- a/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt +++ b/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt @@ -14,14 +14,14 @@ import javax.inject.Inject class CheckBoxProvider @Inject constructor(@ForActivity private val context: Context, private val colorProvider: ColorProvider) { - fun getCheckBox(task: Task) = getCheckBox(task.isCompleted, task.isRecurring, task.priority) + fun getCheckBox(task: Task) = getCheckBox(task.isCompleted, task.isRecurring, task.priority!!) fun getCheckBox(complete: Boolean, repeating: Boolean, priority: Int) = getDrawable(getDrawableRes(complete, repeating), priority) fun getWidgetCheckBox(task: Task): Bitmap { val wrapped = DrawableUtil.getWrapped(context, getDrawableRes(task.isCompleted, task.isRecurring)) - DrawableUtil.setTint(wrapped, colorProvider.getPriorityColor(task.priority, false)) + DrawableUtil.setTint(wrapped, colorProvider.getPriorityColor(task.priority!!, false)) return convertToBitmap(wrapped) }