# Plan: Address Final Polish Nits (Review #19) Address the remaining non-blocking observations from Review #19 to ensure the Feedback screen is fully reactive and accessible. ## Objective 1. Make the privacy disclosure reactive to live preference changes. 2. Remove redundant `IconButton` in the Device Information header for better accessibility. ## Key Files & Context - `app/src/main/java/com/servicebook/ui/reportbug/ReportBugViewModel.kt`: Hydrates `crashReportingEnabled` once in `init`. - `app/src/main/java/com/servicebook/ui/reportbug/ReportBugScreen.kt`: Contains redundant `IconButton` and `clickable` Row. ## Implementation Steps ### 1. Reactive Disclosure Visibility - Modify `ReportBugViewModel.kt` to observe the `preferences` flow instead of capturing the first value in `init`. - This ensures the disclosure appears/disappears immediately if the user toggles crash reporting in Settings (e.g., if the screen is kept in the backstack or backgrounded). ### 2. A11y Polish (Header Redundancy) - Refactor the Device Information header in `ReportBugScreen.kt`. - Keep the `Row` clickable (better touch target). - Remove the `IconButton` wrapper around the expansion icon. - Ensure the `Icon` remains decorative (`contentDescription = null`) as the Row already provides the label. - Add `semantics { stateDescription = ... }` to the Row to announce "Expanded" or "Collapsed" state to screen readers. ## Verification & Testing - **Unit Test**: Update `ReportBugViewModelTest.kt` to verify that `crashReportingEnabled` state updates when the preferences flow emits a new value. - **Compose Test**: Verify that the Device Information header is announced correctly by screen readers (simulated via semantics check). - **Screenshot Test**: No visual change expected for the default state, but verify that the header looks consistent after removing the `IconButton` padding. - **Manual Sanity**: Toggle crash reporting in a mock settings state and verify the Feedback screen reacts.