Skip to content

Commit 07e3c9c

Browse files
ericli3690mikehardy
authored andcommitted
feat(reminders): set notifications on boot-up, launch, add, and edit
GSoC 2025: Review Reminders Added calls to set review reminder notifications on device boot-up and app start-up to AnkiDroidApp and BootService. Modifies ScheduleReminders so that it sets alarms for review reminders via AlarmManagerService.
1 parent 07401c5 commit 07e3c9c

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import com.ichi2.anki.preferences.SharedPreferencesProvider
5252
import com.ichi2.anki.preferences.sharedPrefs
5353
import com.ichi2.anki.servicelayer.DebugInfoService
5454
import com.ichi2.anki.servicelayer.ThrowableFilterService
55+
import com.ichi2.anki.services.AlarmManagerService
5556
import com.ichi2.anki.services.NotificationService
5657
import com.ichi2.anki.settings.Prefs
5758
import com.ichi2.anki.ui.dialogs.ActivityAgnosticDialogs
@@ -206,7 +207,7 @@ open class AnkiDroidApp :
206207

207208
if (Prefs.newReviewRemindersEnabled) {
208209
Timber.i("Setting review reminder notifications if they have not already been set")
209-
// TODO: GSoC 2025
210+
AlarmManagerService.scheduleAllNotifications(applicationContext)
210211
} else {
211212
// Register for notifications
212213
Timber.i("AnkiDroidApp: Starting Services")

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import com.ichi2.anki.dialogs.DeckSelectionDialog
4141
import com.ichi2.anki.launchCatchingTask
4242
import com.ichi2.anki.libanki.DeckId
4343
import com.ichi2.anki.model.SelectableDeck
44+
import com.ichi2.anki.services.AlarmManagerService
4445
import com.ichi2.anki.showError
4546
import com.ichi2.anki.snackbar.BaseSnackbarBuilderProvider
4647
import com.ichi2.anki.snackbar.SnackbarBuilder
@@ -186,6 +187,7 @@ class ScheduleReminders :
186187
Timber.d("Handling add/edit dialog result: mode=%s reminder=%s", modeOfFinishedDialog, newOrModifiedReminder)
187188
updateDatabaseForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
188189
updateUIForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
190+
updateAlarmsForAddEditDialog(newOrModifiedReminder, modeOfFinishedDialog)
189191
// Feedback
190192
showSnackbar(
191193
when (modeOfFinishedDialog) {
@@ -282,6 +284,28 @@ class ScheduleReminders :
282284
triggerUIUpdate()
283285
}
284286

287+
/**
288+
* Update the AlarmManager notifications for the new or modified reminder.
289+
* @see handleAddEditDialogResult
290+
*/
291+
private fun updateAlarmsForAddEditDialog(
292+
newOrModifiedReminder: ReviewReminder?,
293+
modeOfFinishedDialog: AddEditReminderDialog.DialogMode,
294+
) {
295+
if (modeOfFinishedDialog is AddEditReminderDialog.DialogMode.Edit) {
296+
AlarmManagerService.unscheduleReviewReminderNotifications(
297+
requireContext(),
298+
modeOfFinishedDialog.reminderToBeEdited,
299+
)
300+
}
301+
newOrModifiedReminder?.let {
302+
AlarmManagerService.scheduleReviewReminderNotification(
303+
requireContext(),
304+
it,
305+
)
306+
}
307+
}
308+
285309
/**
286310
* Retrieves a deck name from the collection for a given deck ID and passes it to the provided callback.
287311
* Used by the [ScheduleRemindersAdapter] because it cannot access the collection directly.
@@ -344,6 +368,12 @@ class ScheduleReminders :
344368
// Update UI
345369
reminder.enabled = newState
346370
triggerUIUpdate()
371+
372+
// Update scheduled AlarmManager notifications
373+
when (newState) {
374+
true -> AlarmManagerService.scheduleReviewReminderNotification(requireContext(), reminder)
375+
false -> AlarmManagerService.unscheduleReviewReminderNotifications(requireContext(), reminder)
376+
}
347377
}
348378

349379
/**

AnkiDroid/src/main/java/com/ichi2/anki/services/BootService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class BootService : BroadcastReceiver() {
6767
}
6868
if (Prefs.newReviewRemindersEnabled) {
6969
Timber.i("Executing Boot Service - Review reminders")
70-
// TODO: GSoC 2025: Run schedule all notifications method
70+
AlarmManagerService.scheduleAllNotifications(context)
7171
} else {
7272
// There are cases where the app is installed, and we have access, but nothing exist yet
7373
val col = getColSafe()

0 commit comments

Comments
 (0)