mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Remove reminder alarms and prevent reoccurring removed reminders
cancels reminders that have been removed while updating a task.
This commit is contained in:
parent
3d11aa6947
commit
49e1f2f9d1
2 changed files with 28 additions and 1 deletions
|
|
@ -82,6 +82,17 @@ class TaskAlarmManager(
|
|||
}
|
||||
}
|
||||
|
||||
fun cancelRemovedRemindersAlarms(
|
||||
oldReminders: List<RemindersItem>,
|
||||
newReminders: List<RemindersItem>
|
||||
) {
|
||||
val newReminderIds = newReminders.mapNotNull { it.id }.toSet()
|
||||
val removedReminders = oldReminders.filter { it.id != null && it.id !in newReminderIds }
|
||||
for (reminder in removedReminders) {
|
||||
removeAlarmForRemindersItem(reminder)
|
||||
}
|
||||
}
|
||||
|
||||
fun removeAlarmsForTask(task: Task) {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
task.reminders?.let { reminders ->
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManag
|
|||
import com.habitrpg.android.habitica.models.Tag
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
import com.habitrpg.android.habitica.models.tasks.RemindersItem
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.tasks.TaskGroupPlan
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
|
|
@ -160,6 +161,7 @@ class TaskFormActivity : BaseActivity() {
|
|||
private var taskCompletedMap = mutableStateMapOf<String, Date>()
|
||||
private var preselectedTags: ArrayList<String>? = null
|
||||
private var hasPreselectedTags = false
|
||||
private var originalReminders: List<RemindersItem> = emptyList()
|
||||
|
||||
private var isDiscardCancelled: Boolean = false
|
||||
private var canSave: Boolean = false
|
||||
|
|
@ -678,7 +680,17 @@ class TaskFormActivity : BaseActivity() {
|
|||
if (taskType == TaskType.DAILY || taskType == TaskType.TODO) {
|
||||
task.checklist?.let { binding.checklistContainer.checklistItems = it }
|
||||
binding.remindersContainer.taskType = taskType
|
||||
task.reminders?.let { binding.remindersContainer.reminders = it }
|
||||
task.reminders?.let {
|
||||
binding.remindersContainer.reminders = it
|
||||
originalReminders = it.map { reminder ->
|
||||
RemindersItem().apply {
|
||||
id = reminder.id
|
||||
startDate = reminder.startDate
|
||||
time = reminder.time
|
||||
type = reminder.type
|
||||
}
|
||||
}
|
||||
}
|
||||
checkIfShowNotifLayout()
|
||||
}
|
||||
task.attribute?.let { viewModel.selectedAttribute.value = it }
|
||||
|
|
@ -836,6 +848,10 @@ class TaskFormActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
if (thisTask.type == TaskType.DAILY || thisTask.type == TaskType.TODO) {
|
||||
taskAlarmManager.cancelRemovedRemindersAlarms(
|
||||
oldReminders = originalReminders,
|
||||
newReminders = thisTask.reminders ?: emptyList()
|
||||
)
|
||||
taskAlarmManager.scheduleAlarmsForTask(thisTask)
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue