mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-13 17:51:57 +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) {
|
fun removeAlarmsForTask(task: Task) {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
task.reminders?.let { reminders ->
|
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.Tag
|
||||||
import com.habitrpg.android.habitica.models.members.Member
|
import com.habitrpg.android.habitica.models.members.Member
|
||||||
import com.habitrpg.android.habitica.models.social.Challenge
|
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.Task
|
||||||
import com.habitrpg.android.habitica.models.tasks.TaskGroupPlan
|
import com.habitrpg.android.habitica.models.tasks.TaskGroupPlan
|
||||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||||
|
|
@ -160,6 +161,7 @@ class TaskFormActivity : BaseActivity() {
|
||||||
private var taskCompletedMap = mutableStateMapOf<String, Date>()
|
private var taskCompletedMap = mutableStateMapOf<String, Date>()
|
||||||
private var preselectedTags: ArrayList<String>? = null
|
private var preselectedTags: ArrayList<String>? = null
|
||||||
private var hasPreselectedTags = false
|
private var hasPreselectedTags = false
|
||||||
|
private var originalReminders: List<RemindersItem> = emptyList()
|
||||||
|
|
||||||
private var isDiscardCancelled: Boolean = false
|
private var isDiscardCancelled: Boolean = false
|
||||||
private var canSave: Boolean = false
|
private var canSave: Boolean = false
|
||||||
|
|
@ -678,7 +680,17 @@ class TaskFormActivity : BaseActivity() {
|
||||||
if (taskType == TaskType.DAILY || taskType == TaskType.TODO) {
|
if (taskType == TaskType.DAILY || taskType == TaskType.TODO) {
|
||||||
task.checklist?.let { binding.checklistContainer.checklistItems = it }
|
task.checklist?.let { binding.checklistContainer.checklistItems = it }
|
||||||
binding.remindersContainer.taskType = taskType
|
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()
|
checkIfShowNotifLayout()
|
||||||
}
|
}
|
||||||
task.attribute?.let { viewModel.selectedAttribute.value = it }
|
task.attribute?.let { viewModel.selectedAttribute.value = it }
|
||||||
|
|
@ -836,6 +848,10 @@ class TaskFormActivity : BaseActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thisTask.type == TaskType.DAILY || thisTask.type == TaskType.TODO) {
|
if (thisTask.type == TaskType.DAILY || thisTask.type == TaskType.TODO) {
|
||||||
|
taskAlarmManager.cancelRemovedRemindersAlarms(
|
||||||
|
oldReminders = originalReminders,
|
||||||
|
newReminders = thisTask.reminders ?: emptyList()
|
||||||
|
)
|
||||||
taskAlarmManager.scheduleAlarmsForTask(thisTask)
|
taskAlarmManager.scheduleAlarmsForTask(thisTask)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue