feat(crash): privacy-respecting crash reporting via Gitea issue
Capture uncaught exceptions on-device and let the user submit them, by hand, as a Gitea issue — no network access, no auto-upload (the app holds no INTERNET permission). Closes prod-readiness item 10; the issue templates also close item 7. - CrashReporter: uncaught-exception handler installed first in CalendulaApp.onCreate so startup crashes are caught too. Persists an allowlist-only report (app/Android/device version, locale, time, stack trace — nothing else) to filesDir/crash, then chains to the previous handler so the process still dies normally. Crash-loop detection + markHealthy reset. - buildCrashReport is pure/testable; CrashReportBuilderTest asserts the header is exactly the allowlisted lines (guards against PII creep). - Surfacing: next-launch dialog showing the full report verbatim (the privacy backstop) with a dismissed-marker so it doesn't nag; a Settings "Report a problem" row; and a minimal standalone CrashReportActivity that MainActivity routes to on a startup crash-loop, kept clear of the Hilt graph / DataStore theme. - submitCrashReport copies the report to the clipboard and opens the prefilled Gitea issues/new URL (long traces fall back to paste). - .gitea/ISSUE_TEMPLATE: crash_report, bug_report, feature_request. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -282,6 +282,8 @@
|
||||
<string name="settings_about_source">Quellcode</string>
|
||||
<string name="settings_about_version">Version %1$s</string>
|
||||
<string name="settings_about_logo_desc">Calendula-App-Symbol</string>
|
||||
<string name="settings_report_problem">Problem melden</string>
|
||||
<string name="settings_report_problem_hint">Absturzbericht senden oder Issue-Tracker öffnen</string>
|
||||
|
||||
<!-- Calendar manager -->
|
||||
<string name="calendars_title">Kalender</string>
|
||||
@@ -337,4 +339,16 @@
|
||||
<item quantity="one">%d bereits in diesem Kalender übersprungen.</item>
|
||||
<item quantity="other">%d bereits in diesem Kalender übersprungen.</item>
|
||||
</plurals>
|
||||
|
||||
<!-- Absturzberichte: vom Nutzer selbst als Gitea-Issue einreichbar -->
|
||||
<string name="crash_dialog_title">Calendula ist abgestürzt</string>
|
||||
<string name="crash_dialog_message">Calendula wurde beim letzten Mal unerwartet beendet. Du kannst bei der Behebung helfen, indem du diesen Bericht als Issue sendest. Er bleibt auf deinem Gerät, bis du ihn teilst, und enthält keine persönlichen Daten oder Kalenderinhalte — nur die technischen Angaben unten.</string>
|
||||
<string name="crash_dialog_report">Melden</string>
|
||||
<string name="crash_dialog_dismiss">Nicht jetzt</string>
|
||||
<string name="crash_report_issue_title">Absturzbericht</string>
|
||||
<string name="crash_report_clip_label">Calendula-Absturzbericht</string>
|
||||
<string name="crash_report_copied">Bericht in die Zwischenablage kopiert</string>
|
||||
<string name="crash_report_open_failed">Der Issue-Tracker konnte nicht geöffnet werden. Der Bericht ist in deiner Zwischenablage.</string>
|
||||
<string name="crash_report_body_template">Danke, dass du einen Absturz in Calendula meldest. Bitte ergänze, was du gerade getan hast, und sende dann ab.\n\n### Was ist passiert\n\n\n### Absturzbericht\n%1$s\n</string>
|
||||
<string name="crash_report_body_paste">_(Der Bericht war zu lang für diesen Link — füge ihn aus deiner Zwischenablage hier ein.)_</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user