From 5b1a6dd2e966b8ed35c09664f4ad059af184e82e Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 1 Jan 2024 11:01:45 -0500 Subject: [PATCH] Remove alarms/reminders on task deletion --- .../android/habitica/helpers/TaskAlarmManager.kt | 15 +++++++++------ .../habitica/ui/activities/TaskFormActivity.kt | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt index 2da0d9ac0..6bc16793e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.kt @@ -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, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index 45dfb5e09..fb0daf80c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -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()