diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt index 119fbbe22..d19f7699d 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt @@ -2,7 +2,10 @@ package com.todoroo.astrid.service import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.tasks.LocalBroadcastManager import org.tasks.caldav.VtodoCache @@ -83,8 +86,11 @@ class TaskDeleter @Inject constructor( } private suspend fun cleanup(tasks: List) { + if (tasks.isEmpty()) { + return + } + notificationManager.cancel(tasks) tasks.forEach { task -> - notificationManager.cancel(task) locationDao.getGeofencesForTask(task).forEach { locationDao.delete(it) geofenceApi.update(it.place!!) @@ -94,7 +100,11 @@ class TaskDeleter @Inject constructor( userActivityDao.delete(it) } } - notificationManager.updateTimerNotification() - deletionDao.purgeDeleted() + coroutineScope { + launch(Dispatchers.IO) { + notificationManager.updateTimerNotification() + deletionDao.purgeDeleted() + } + } } } diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.kt b/app/src/main/java/org/tasks/notifications/NotificationManager.kt index ae1c9e2c7..84d5ebbf1 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.kt +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.kt @@ -10,6 +10,8 @@ import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities.preUpsideDownCake import com.todoroo.astrid.utility.Constants import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.data.dao.LocationDao @@ -65,12 +67,20 @@ class NotificationManager @Inject constructor( @SuppressLint("CheckResult") suspend fun cancel(ids: Iterable) { - for (id in ids) { - notificationManager.cancel(id.toInt()) + coroutineScope { + launch { + for (id in ids) { + notificationManager.cancel(id.toInt()) + } + } } queue.remove(ids) notificationDao.deleteAll(ids.toList()) - notifyTasks(emptyList(), alert = false, nonstop = false, fiveTimes = false) + coroutineScope { + launch { + notifyTasks(emptyList(), alert = false, nonstop = false, fiveTimes = false) + } + } } suspend fun restoreNotifications(cancelExisting: Boolean) {