Replaces the small inline report_submitted text ("Report sent. Thank you!") on ReportReviewScreen with the fuller thank-you/no-guarantee copy requested in #161, delivered via a Material3 AlertDialog (ReportSubmittedDialog) instead of inline text.
Avoids the auto-navigate race the ticket flags: the screen's LaunchedEffect(state.loaded, state.exists, state.submit) that leaves the screen once the report row is gone now also checks state.submit — it no longer fires while a submit is in flight (SUBMITTING) or has just succeeded (SUCCEEDED). For those two states, onDone() is instead called from the new dialog's acknowledgement (confirm button or dismiss), which is what actually navigates away. This works regardless of whether the row deletion (by ReportUploadWorker, which can happen moments after SUCCEEDED) is observed before or after the SUCCEEDED status itself, since auto-navigate is suppressed for the entire SUBMITTING→SUCCEEDED window, not just at the exact instant of SUCCEEDED.
Plain discard and the other terminal states (FAILED, UNAVAILABLE) are untouched and still auto-navigate immediately, same as before.
report_submitted string updated in place with the new copy (avoids leaving an orphaned unused resource); added report_submitted_dismiss ("OK") for the dialog's button.
Test plan
assembleDebug, testDebugUnitTest, lintDebug, ktlintCheck, detekt, compileDebugAndroidTestKotlin all green locally (JDK 21).
ReportReviewViewModelTest (unchanged, still 5/5 passing) — no ViewModel changes were needed since the gating lives in the composable's existing state.submit/state.exists.
No existing androidTest covers ReportReviewScreen, so none needed updating.
## Summary
- Replaces the small inline `report_submitted` text ("Report sent. Thank you!") on `ReportReviewScreen` with the fuller thank-you/no-guarantee copy requested in #161, delivered via a Material3 `AlertDialog` (`ReportSubmittedDialog`) instead of inline text.
- **Avoids the auto-navigate race** the ticket flags: the screen's `LaunchedEffect(state.loaded, state.exists, state.submit)` that leaves the screen once the report row is gone now also checks `state.submit` — it no longer fires while a submit is in flight (`SUBMITTING`) or has just succeeded (`SUCCEEDED`). For those two states, `onDone()` is instead called from the new dialog's acknowledgement (confirm button or dismiss), which is what actually navigates away. This works regardless of whether the row deletion (by `ReportUploadWorker`, which can happen moments after `SUCCEEDED`) is observed before or after the `SUCCEEDED` status itself, since auto-navigate is suppressed for the entire `SUBMITTING`→`SUCCEEDED` window, not just at the exact instant of `SUCCEEDED`.
- Plain discard and the other terminal states (`FAILED`, `UNAVAILABLE`) are untouched and still auto-navigate immediately, same as before.
- `report_submitted` string updated in place with the new copy (avoids leaving an orphaned unused resource); added `report_submitted_dismiss` ("OK") for the dialog's button.
## Test plan
- [x] `assembleDebug`, `testDebugUnitTest`, `lintDebug`, `ktlintCheck`, `detekt`, `compileDebugAndroidTestKotlin` all green locally (JDK 21).
- [x] `ReportReviewViewModelTest` (unchanged, still 5/5 passing) — no ViewModel changes were needed since the gating lives in the composable's existing `state.submit`/`state.exists`.
- No existing androidTest covers `ReportReviewScreen`, so none needed updating.
Closes #161
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
Summary
report_submittedtext ("Report sent. Thank you!") onReportReviewScreenwith the fuller thank-you/no-guarantee copy requested in #161, delivered via a Material3AlertDialog(ReportSubmittedDialog) instead of inline text.LaunchedEffect(state.loaded, state.exists, state.submit)that leaves the screen once the report row is gone now also checksstate.submit— it no longer fires while a submit is in flight (SUBMITTING) or has just succeeded (SUCCEEDED). For those two states,onDone()is instead called from the new dialog's acknowledgement (confirm button or dismiss), which is what actually navigates away. This works regardless of whether the row deletion (byReportUploadWorker, which can happen moments afterSUCCEEDED) is observed before or after theSUCCEEDEDstatus itself, since auto-navigate is suppressed for the entireSUBMITTING→SUCCEEDEDwindow, not just at the exact instant ofSUCCEEDED.FAILED,UNAVAILABLE) are untouched and still auto-navigate immediately, same as before.report_submittedstring updated in place with the new copy (avoids leaving an orphaned unused resource); addedreport_submitted_dismiss("OK") for the dialog's button.Test plan
assembleDebug,testDebugUnitTest,lintDebug,ktlintCheck,detekt,compileDebugAndroidTestKotlinall green locally (JDK 21).ReportReviewViewModelTest(unchanged, still 5/5 passing) — no ViewModel changes were needed since the gating lives in the composable's existingstate.submit/state.exists.ReportReviewScreen, so none needed updating.Closes #161
🤖 Generated with Claude Code