Remove AfterSaveWork

pull/2744/head
Alex Baker 2 years ago
parent 457b89c092
commit db889d233a

@ -1,50 +1,68 @@
package com.todoroo.astrid.repeats package com.todoroo.astrid.repeats
import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.service.TaskCompleter
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.COMPLETION_TIME
import org.tasks.makers.TaskMaker.PARENT
import org.tasks.makers.TaskMaker.RECUR
import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTime
import javax.inject.Inject import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class RepeatWithSubtasksTests : InjectingTestCase() { class RepeatWithSubtasksTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDao
@Inject lateinit var repeat: RepeatTaskHelper @Inject lateinit var taskCompleter: TaskCompleter
@Test @Test
fun uncompleteGrandchildren() = runBlocking { fun uncompleteGrandchildren() = runBlocking {
val grandparent = taskDao.createNew(newTask(with(RECUR, "RRULE:FREQ=DAILY"))) val grandparent = taskDao.createNew(
val parent = taskDao.createNew(newTask(with(PARENT, grandparent))) Task(
val child = taskDao.createNew(newTask( recurrence = "RRULE:FREQ=DAILY"
with(PARENT, parent), )
with(COMPLETION_TIME, DateTime()) )
)) val parent = taskDao.createNew(
Task(
parent = grandparent
)
)
val child = taskDao.createNew(
Task(
parent = parent,
completionDate = now(),
)
)
repeat.handleRepeat(taskDao.fetch(grandparent)!!) assertTrue(taskDao.fetch(child)!!.isCompleted)
taskCompleter.setComplete(grandparent)
assertFalse(taskDao.fetch(child)!!.isCompleted) assertFalse(taskDao.fetch(child)!!.isCompleted)
} }
@Test @Test
fun uncompleteGoogleTaskChildren() = runBlocking { fun uncompleteGoogleTaskChildren() = runBlocking {
val parent = taskDao.createNew(newTask(with(RECUR, "RRULE:FREQ=DAILY"))) val parent = taskDao.createNew(
val child = taskDao.createNew(newTask( Task(
with(PARENT, parent), recurrence = "RRULE:FREQ=DAILY"
with(COMPLETION_TIME, DateTime()) )
)) )
val child = taskDao.createNew(
Task(
parent = parent,
completionDate = now(),
)
)
assertTrue(taskDao.fetch(child)!!.isCompleted)
repeat.handleRepeat(taskDao.fetch(parent)!!) taskCompleter.setComplete(parent)
assertFalse(taskDao.fetch(child)!!.isCompleted) assertFalse(taskDao.fetch(child)!!.isCompleted)
} }

@ -21,7 +21,7 @@ import org.tasks.data.TaskDao
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.TimeZone
import javax.inject.Inject import javax.inject.Inject
class GCalHelper @Inject constructor( class GCalHelper @Inject constructor(

@ -11,7 +11,6 @@ import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.data.Task.Companion.createDueDate import com.todoroo.astrid.data.Task.Companion.createDueDate
import com.todoroo.astrid.gcal.GCalHelper import com.todoroo.astrid.gcal.GCalHelper
import com.todoroo.astrid.service.TaskCompleter
import net.fortuna.ical4j.model.Date import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.Recur import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.WeekDay import net.fortuna.ical4j.model.WeekDay
@ -31,7 +30,6 @@ class RepeatTaskHelper @Inject constructor(
private val alarmService: AlarmService, private val alarmService: AlarmService,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val taskCompleter: TaskCompleter,
) { ) {
suspend fun handleRepeat(task: Task) { suspend fun handleRepeat(task: Task) {
val recurrence = task.recurrence val recurrence = task.recurrence
@ -77,7 +75,6 @@ class RepeatTaskHelper @Inject constructor(
.takeIf { it > 0 } .takeIf { it > 0 }
?: (newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate)) ?: (newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate))
rescheduleAlarms(task.id, previousDueDate, newDueDate) rescheduleAlarms(task.id, previousDueDate, newDueDate)
taskCompleter.setComplete(task, false)
broadcastCompletion(task, previousDueDate) broadcastCompletion(task, previousDueDate)
} }

@ -6,23 +6,30 @@ import android.content.Context
import android.media.AudioAttributes import android.media.AudioAttributes
import android.media.AudioAttributes.USAGE_NOTIFICATION_EVENT import android.media.AudioAttributes.USAGE_NOTIFICATION_EVENT
import android.media.RingtoneManager import android.media.RingtoneManager
import androidx.room.withTransaction
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.Database
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.gcal.GCalHelper
import com.todoroo.astrid.repeats.RepeatTaskHelper
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.jobs.WorkManager import org.tasks.data.CaldavDao
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class TaskCompleter @Inject internal constructor( class TaskCompleter @Inject internal constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val database: Database,
private val taskDao: TaskDao, private val taskDao: TaskDao,
private val preferences: Preferences, private val preferences: Preferences,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val workManager: WorkManager, private val repeatTaskHelper: RepeatTaskHelper,
private val caldavDao: CaldavDao,
private val gCalHelper: GCalHelper
) { ) {
suspend fun setComplete(taskId: Long) = suspend fun setComplete(taskId: Long) =
taskDao taskDao
@ -58,16 +65,23 @@ class TaskCompleter @Inject internal constructor(
return return
} }
val completed = completionDate > 0 val completed = completionDate > 0
taskDao.setCompletionDate(tasks.mapNotNull { it.remoteId }, completionDate) database.withTransaction {
tasks.forEachIndexed { i, original -> taskDao.setCompletionDate(tasks.mapNotNull { it.remoteId }, completionDate)
if (i < tasks.size - 1) { tasks.forEachIndexed { i, original ->
original.suppressRefresh() if (i < tasks.lastIndex) {
original.suppressRefresh()
}
taskDao.saved(original)
} }
taskDao.saved(original) tasks.forEach { task ->
} if (completed && task.isRecurring) {
tasks.forEach { gCalHelper.updateEvent(task)
if (completed && it.isRecurring) {
workManager.scheduleRepeat(it) if (caldavDao.getAccountForTask(task.id)?.isSuppressRepeatingTasks != true) {
repeatTaskHelper.handleRepeat(task)
setComplete(task, false)
}
}
} }
} }
if (completed && notificationManager.currentInterruptionFilter == INTERRUPTION_FILTER_ALL) { if (completed && notificationManager.currentInterruptionFilter == INTERRUPTION_FILTER_ALL) {

@ -1,44 +0,0 @@
package org.tasks.jobs
import android.content.Context
import androidx.hilt.work.HiltWorker
import androidx.work.WorkerParameters
import com.todoroo.astrid.gcal.GCalHelper
import com.todoroo.astrid.repeats.RepeatTaskHelper
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import org.tasks.analytics.Firebase
import org.tasks.data.CaldavDao
import org.tasks.data.TaskDao
import org.tasks.injection.BaseWorker
@HiltWorker
class AfterSaveWork @AssistedInject constructor(
@Assisted context: Context,
@Assisted workerParams: WorkerParameters,
firebase: Firebase,
private val repeatTaskHelper: RepeatTaskHelper,
private val taskDao: TaskDao,
private val caldavDao: CaldavDao,
private val gCalHelper: GCalHelper
) : BaseWorker(context, workerParams, firebase) {
override suspend fun run(): Result {
val taskId = inputData.getLong(EXTRA_ID, -1)
val task = taskDao.fetch(taskId) ?: return Result.failure()
if (inputData.getBoolean(EXTRA_SUPPRESS_COMPLETION_SNACKBAR, false)) {
task.suppressRefresh()
}
gCalHelper.updateEvent(task)
if (caldavDao.getAccountForTask(taskId)?.isSuppressRepeatingTasks != true) {
repeatTaskHelper.handleRepeat(task)
}
return Result.success()
}
companion object {
const val EXTRA_ID = "extra_id"
const val EXTRA_SUPPRESS_COMPLETION_SNACKBAR = "extra_suppress_snackbar"
}
}

@ -8,8 +8,6 @@ import org.tasks.data.Place
interface WorkManager { interface WorkManager {
fun scheduleRepeat(task: Task)
fun updateCalendar(task: Task) fun updateCalendar(task: Task)
fun migrateLocalTasks(caldavAccount: CaldavAccount) fun migrateLocalTasks(caldavAccount: CaldavAccount)

@ -56,16 +56,6 @@ class WorkManagerImpl(
private val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager private val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
private val workManager = androidx.work.WorkManager.getInstance(context) private val workManager = androidx.work.WorkManager.getInstance(context)
override fun scheduleRepeat(task: Task) {
enqueue(
OneTimeWorkRequest.Builder(AfterSaveWork::class.java)
.setInputData(
AfterSaveWork.EXTRA_ID to task.id,
AfterSaveWork.EXTRA_SUPPRESS_COMPLETION_SNACKBAR to task.isSuppressRefresh()
)
)
}
override fun updateCalendar(task: Task) { override fun updateCalendar(task: Task) {
enqueue( enqueue(
OneTimeWorkRequest.Builder(UpdateCalendarWork::class.java) OneTimeWorkRequest.Builder(UpdateCalendarWork::class.java)

@ -22,7 +22,6 @@ abstract class RepeatTests {
alarmService, alarmService,
mock(TaskDao::class.java), mock(TaskDao::class.java),
mock(LocalBroadcastManager::class.java), mock(LocalBroadcastManager::class.java),
mock(TaskCompleter::class.java)
) )
@Before @Before

Loading…
Cancel
Save