Remove alarms/reminders on task deletion

This commit is contained in:
Hafiz 2024-01-01 11:01:45 -05:00 committed by Phillip Thelen
parent 503271c440
commit 5b1a6dd2e9
2 changed files with 11 additions and 6 deletions

View file

@ -72,10 +72,13 @@ class TaskAlarmManager(
}
private fun removeAlarmsForTask(task: Task) {
task.reminders?.let {
for (reminder in it) {
this.removeAlarmForRemindersItem(reminder)
fun removeAlarmsForTask(task: Task) {
CoroutineScope(Dispatchers.IO).launch {
task.reminders?.let { reminders ->
// Remove not only the immediate reminder, but also the next however many (upcomingReminderOccurrencesToSchedule) reminders
reminders.forEachIndexed { index, reminder ->
removeAlarmForRemindersItem(reminder, index)
}
}
}
}
@ -167,10 +170,10 @@ class TaskAlarmManager(
}
}
private fun removeAlarmForRemindersItem(remindersItem: RemindersItem) {
private fun removeAlarmForRemindersItem(remindersItem: RemindersItem, occurrenceIndex: Int? = null) {
val intent = Intent(context, TaskReceiver::class.java)
intent.action = remindersItem.id
val intentId = remindersItem.id?.hashCode() ?: (0 and 0xfffffff)
val intentId = if (occurrenceIndex != null) (remindersItem.id?.hashCode() ?: (0 and 0xfffffff)) + occurrenceIndex else (remindersItem.id?.hashCode() ?: (0 and 0xfffffff))
val sender = PendingIntent.getBroadcast(
context,
intentId,

View file

@ -835,6 +835,8 @@ class TaskFormActivity : BaseActivity() {
task?.id?.let {
lifecycleScope.launch(Dispatchers.Main) {
taskRepository.deleteTask(it)
val taskCopy = task
taskCopy?.let { taskAlarmManager.removeAlarmsForTask(it) }
}
}
finish()