Skip to content

Commit 7f9325a

Browse files
committed
feat(reminders): set alarms from ScheduleReminders
GSoC 2025: Review Reminders - Modifies ScheduleReminders so that it sets alarms for review reminders via AlarmManagerService.
1 parent e54f4ec commit 7f9325a

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

AnkiDroid/src/main/java/com/ichi2/anki/reviewreminders/ScheduleReminders.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.ichi2.anki.SingleFragmentActivity
3737
import com.ichi2.anki.dialogs.DeckSelectionDialog
3838
import com.ichi2.anki.launchCatchingTask
3939
import com.ichi2.anki.libanki.DeckId
40+
import com.ichi2.anki.services.AlarmManagerService
4041
import com.ichi2.anki.showError
4142
import com.ichi2.anki.snackbar.BaseSnackbarBuilderProvider
4243
import com.ichi2.anki.snackbar.SnackbarBuilder
@@ -181,6 +182,7 @@ class ScheduleReminders :
181182
Timber.d("Handling add/edit dialog result: mode=%s reminder=%s", modeOfFinishedDialog, newOrModifiedReminder)
182183
updateDatabaseForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
183184
updateUIForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
185+
updateAlarmsForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
184186
// Feedback
185187
showSnackbar(
186188
when (modeOfFinishedDialog) {
@@ -277,6 +279,28 @@ class ScheduleReminders :
277279
triggerUIUpdate()
278280
}
279281

282+
/**
283+
* Update the AlarmManager notifications for the new or modified reminder.
284+
* @see handleAddEditDialogResult
285+
*/
286+
private fun updateAlarmsForAddEditDialog(
287+
newOrModifiedReminder: ReviewReminder?,
288+
modeOfFinishedDialog: AddEditReminderDialog.DialogMode,
289+
) {
290+
if (modeOfFinishedDialog is AddEditReminderDialog.DialogMode.Edit) {
291+
AlarmManagerService.unscheduleReviewReminderNotifications(
292+
requireContext(),
293+
modeOfFinishedDialog.reminderToBeEdited,
294+
)
295+
}
296+
newOrModifiedReminder?.let {
297+
AlarmManagerService.scheduleReviewReminderNotification(
298+
requireContext(),
299+
it,
300+
)
301+
}
302+
}
303+
280304
/**
281305
* Sets a TextView's text based on a [ReviewReminderScope].
282306
* The text is either the scope's associated deck's name, or "All Decks" if the scope is global.
@@ -329,6 +353,12 @@ class ScheduleReminders :
329353
// Update UI
330354
reminder.enabled = newState
331355
triggerUIUpdate()
356+
357+
// Update scheduled AlarmManager notifications
358+
when (newState) {
359+
true -> AlarmManagerService.scheduleReviewReminderNotification(requireContext(), reminder)
360+
false -> AlarmManagerService.unscheduleReviewReminderNotifications(requireContext(), reminder)
361+
}
332362
}
333363

334364
/**

0 commit comments

Comments
 (0)