Prevent multiple completions from notification

renovate/dagger.hilt
Alex Baker 2 weeks ago
parent ad4d938b94
commit 6ce170533e

@ -7,6 +7,7 @@ import com.todoroo.astrid.service.TaskCompleter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.tasks.data.dao.NotificationDao
import org.tasks.injection.ApplicationScope import org.tasks.injection.ApplicationScope
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import timber.log.Timber import timber.log.Timber
@ -15,6 +16,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class CompleteTaskReceiver : BroadcastReceiver() { class CompleteTaskReceiver : BroadcastReceiver() {
@Inject lateinit var notificationManager: NotificationManager @Inject lateinit var notificationManager: NotificationManager
@Inject lateinit var notificationDao: NotificationDao
@Inject lateinit var taskCompleter: TaskCompleter @Inject lateinit var taskCompleter: TaskCompleter
@Inject @ApplicationScope lateinit var scope: CoroutineScope @Inject @ApplicationScope lateinit var scope: CoroutineScope
@ -22,6 +24,10 @@ class CompleteTaskReceiver : BroadcastReceiver() {
val taskId = intent.getLongExtra(TASK_ID, 0) val taskId = intent.getLongExtra(TASK_ID, 0)
Timber.i("Completing %s", taskId) Timber.i("Completing %s", taskId)
scope.launch { scope.launch {
if (!notificationDao.hasNotification(taskId)) {
Timber.e("No notification found for $taskId")
return@launch
}
notificationManager.cancel(taskId) notificationManager.cancel(taskId)
taskCompleter.setComplete(taskId) taskCompleter.setComplete(taskId)
} }
@ -30,4 +36,4 @@ class CompleteTaskReceiver : BroadcastReceiver() {
companion object { companion object {
const val TASK_ID = "id" const val TASK_ID = "id"
} }
} }

@ -25,4 +25,7 @@ interface NotificationDao {
@Query("SELECT MAX(timestamp) FROM notification") @Query("SELECT MAX(timestamp) FROM notification")
suspend fun latestTimestamp(): Long? suspend fun latestTimestamp(): Long?
@Query("SELECT EXISTS(SELECT 1 FROM notification WHERE task = :taskId)")
suspend fun hasNotification(taskId: Long): Boolean
} }
Loading…
Cancel
Save