Reminder troubleshooting - for review #50
Closed
david-allison wants to merge 27 commits intomainfrom
Closed
Conversation
- ImportEntry was a data class with @Suppress(ArrayInDataClass) on top, but none of the data class features (equals, hashCode, copy, componentN, toString) were ever used. Drop the data keyword, the suppression, and the stale comment. Also tighten to since it is never reassigned.
Assisted-by: Claude Opus 4.6
And add tests There is a bug here, and tests make this bug obvious Assisted-by: Claude Opus 4.6
If the user is retrying a call to 'sync' due to wanting to do a full upload/download, then do not show the metered sync dialog again Fixes 20674 Assisted-by: Claude Opus 4.6
Assisted-by: Claude Opus 4.6
Technically a bugfix, but since the code only ran `onCreate`, it was never a practical issue. Also allows us to use `applied` to simplify the logic But it allows us to trim code in the DeckPicker
We did not follow a common pattern
Fixes BackendCollectionAlreadyOpenException
init { } ran code, but the coroutines were not
cancelled
Fixes 20704
testFixtures were introduced in fbf2dd0 This allows us to remove a module
…AS_REIFIED` error caused by KT-74516
511b8a3 to
378cb2d
Compare
In multiselect mode... User request - delete is normally on the bottom I left it above 'undo'
This checks the 'main' issue: permission has not been granted Assisted-by: Claude Opus 4.6
Study reminders are not important enough for us to want to break Do not Disturb But we should warn users that reminders may be silenced due to it Influenced by Daylio - they also perform this check https://developer.android.com/develop/ui/views/notifications#dnd-mode Assisted-by: Claude Opus 4.6
Battery optimization makes it less likely for an app to wake and post a notification. There are 3 statuses: * Unrestricted * Optimized - Default * Restricted Since 'Optimized' is the default, and the 'obvious' Android UI encourages a user to change this to 'Restricted', Optimized is a warning and 'Restricted' is an error, to showcase to a user that they have made things worse Influenced by Daylio - they also perform this check https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases Assisted-by: Claude Opus 4.6
A user can request `Manifest.permission.SCHEDULE_EXACT_ALARM` on API 31+ which allows scheduling of exact alarms. We do not currently support this in the manifest, but we should do before launch https://developer.android.com/about/versions/14/changes/schedule-exact-alarms Influenced by Daylio - they also perform this check Assisted-by: Claude Opus 4.6
Power saving can delay notifications being fired. OEMs have different restrictions on Android when this feature is enabled In addition: Doze mode can defer AlarmManager calls unless a `set...AndAllowWhenIdle` call is made. https://developer.android.com/training/monitoring-device-state/doze-standby Influenced by Daylio - they also perform this check Assisted-by: Claude Opus 4.6
We want to notify the UI about the general status of our troubleshooting checks, so we can know: * If reminders are broken * If reminders may not work * If reminders are likely working Assisted-by: Claude Opus 4.6
ericli3690
approved these changes
Apr 11, 2026
ericli3690
left a comment
There was a problem hiding this comment.
Only nits, looks amazing, ship it 🔥
| android:gravity="center" | ||
| android:textAppearance="?attr/textAppearanceBodyMedium" | ||
| android:textColor="?android:attr/textColorSecondary" | ||
| tools:text="Everything looks good! Your reminders should work as expected." /> |
There was a problem hiding this comment.
nice, we'll yank these guys out into separate strings once everything is stable 🔥
Although I think this string here never actually shows up since it gets overridden programmatically
Comment on lines
+334
to
+335
| // TODO: convert error icon to outline | ||
| private fun CheckResult.iconRes(): Int = |
There was a problem hiding this comment.
Similarly, consider moving this to where CheckResult is defined
|
Actually on second thought don't forget:
|
`CollectionLoadingErrorDialog().toMessage()` was incorrect introduced in 6ba468e Fixes 20712 Assisted-by: Calude Opus 4.6
Part of issue 19896
672929b to
31032f6
Compare
6d2c63a to
57e47eb
Compare
For now, this only shows the status, not the checks * Adds a menu item on reminders to open troubleshooting * Display the overall status of checks Assisted-by: Claude Opus 4.6
Assisted-by: Claude Opus 4.6
Allow a user to tap a troubleshooting issue and open an appropriate screen to fix the issue Assisted-by: Claude Opus 4.6
57e47eb to
6066a85
Compare
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Work in progress. This won't be in this repo and will be recreated for Anki-Android.
Checklist
Please, go through these checks before submitting the PR.