Prevent multiple completions from notification

renovate/com.android.billingclient-billing-ktx-6.x
Alex Baker 1 week ago
parent ad4d938b94
commit 6ce170533e

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

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