There is no crash/error capture today. This ticket adds the capture layer plus a user
entry point; the review-and-submit UI is #33. Per the project decision, nothing is ever
sent automatically — capture only stores locally for the user to review.
Scope
Install an uncaught-exception handler that persists a structured crash record locally
(stack trace + app/version/device metadata) for review on next launch — never auto-sent.
A manual "Report a problem" entry point (Settings) to start a report without a crash.
Collect a diagnostic bundle: app version, Android version/device, non-PII settings, and
a recent in-app log ring buffer. Minimize what's captured (server also scrubs, #34).
Persist pending reports locally until the user reviews/submits or discards them.
Acceptance criteria
A forced crash produces a saved report that is offered for review on next launch.
"Report a problem" creates a report on demand.
Nothing leaves the device without explicit user action (handled in #33).
new package under org.libremail for reporting; ui/settings/SettingsScreen.kt entry
Dependencies
Feeds #33. Part of the opt-in, F-Droid-safe design (#16).
Part of #10.
## Context
There is no crash/error capture today. This ticket adds the capture layer plus a user
entry point; the review-and-submit UI is #33. Per the project decision, nothing is ever
sent automatically — capture only stores locally for the user to review.
## Scope
- [ ] Install an uncaught-exception handler that persists a structured crash record locally
(stack trace + app/version/device metadata) for review on next launch — never auto-sent.
- [ ] A manual "Report a problem" entry point (Settings) to start a report without a crash.
- [ ] Collect a diagnostic bundle: app version, Android version/device, non-PII settings, and
a recent in-app log ring buffer. Minimize what's captured (server also scrubs, #34).
- [ ] Persist pending reports locally until the user reviews/submits or discards them.
## Acceptance criteria
- A forced crash produces a saved report that is offered for review on next launch.
- "Report a problem" creates a report on demand.
- Nothing leaves the device without explicit user action (handled in #33).
## Relevant files
- `LibreMailApplication` / `MainActivity` (`Thread.setDefaultUncaughtExceptionHandler`)
- new package under `org.libremail` for reporting; `ui/settings/SettingsScreen.kt` entry
## Dependencies
Feeds #33. Part of the opt-in, F-Droid-safe design (#16).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #10.
Context
There is no crash/error capture today. This ticket adds the capture layer plus a user
entry point; the review-and-submit UI is #33. Per the project decision, nothing is ever
sent automatically — capture only stores locally for the user to review.
Scope
(stack trace + app/version/device metadata) for review on next launch — never auto-sent.
a recent in-app log ring buffer. Minimize what's captured (server also scrubs, #34).
Acceptance criteria
Relevant files
LibreMailApplication/MainActivity(Thread.setDefaultUncaughtExceptionHandler)org.libremailfor reporting;ui/settings/SettingsScreen.ktentryDependencies
Feeds #33. Part of the opt-in, F-Droid-safe design (#16).