Successfully created and wrote to new file: /home/Messier82/.gemini/tmp/service-book/5bfe5844-4dcb-427f-a982-7e05360a63da/plans/issue-89.md. Here is the updated code: # Plan: Vanilla Android 16 back button styling ## Goal Replace the flat `IconButton` back buttons in `TopAppBar.navigationIcon` slots with the rounded, tonal-background style used by the Android 16 Settings app. ## Approach Material 3 (`compose-bom 2026.04.01`) ships `FilledTonalIconButton`, which renders a circular button with a `secondaryContainer` background — visually identical to the Android 16 system back button. Use that component instead of plain `IconButton` for top-bar back affordances. Create one shared composable to keep all 9 screens consistent and avoid drift: **New file:** `app/src/main/java/com/servicebook/ui/components/TopBarBackButton.kt` ```kotlin package com.servicebook.ui.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material3.FilledTonalIconButton import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import com.servicebook.R @Composable fun TopBarBackButton(onClick: () -> Unit) { FilledTonalIconButton(onClick = onClick) { Icon( Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = stringResource(R.string.action_back), ) } } ``` Notes on the choice: - `FilledTonalIconButton`'s defaults (40dp, circular, `secondaryContainer` background) match the reference screenshot. - Use `Icons.AutoMirrored.Outlined.ArrowBack` everywhere. Today the codebase is split — Outlined in 7 places, Filled in 2 (`VehicleDetailScreen.kt:165`, `RecordDetailScreen.kt:149` + preview at `:484`). Standardising on Outlined matches the majority and the Android 16 reference (outlined glyph inside a tonal pill). - The `contentDescription` already lives in `R.string.action_back` — reuse it so a11y is unchanged. ## Call sites to update (9 occurrences across 8 files) Replace each `IconButton(onClick = …) { Icon(ArrowBack, …) }` inside `navigationIcon = { … }` with `TopBarBackButton(onClick = …)`, and drop the now-unused `ArrowBack` / `IconButton` / `Icon` imports per file: 1. `app/src/main/java/com/servicebook/ui/settings/SettingsScreen.kt:274` 2. `app/src/main/java/com/servicebook/ui/settings/CategoriesScreen.kt:147` (single-line form) 3. `app/src/main/java/com/servicebook/ui/reportbug/ReportBugScreen.kt:123` 4. `app/src/main/java/com/servicebook/ui/vehicles/AddEditVehicleScreen.kt:114` 5. `app/src/main/java/com/servicebook/ui/records/AddEditRecordScreen.kt:257` 6. `app/src/main/java/com/servicebook/ui/records/ImageViewerScreen.kt:80` 7. `app/src/main/java/com/servicebook/ui/records/RecordDetailScreen.kt:147` (real screen) and `:483` (`RecordDetailScreenPreview`) 8. `app/src/main/java/com/servicebook/ui/records/VehicleDetailScreen.kt:164` 9. `app/src/main/java/com/servicebook/ui/navigation/AppNavGraph.kt:234` (setup step 2 top bar) `VehicleListScreen.kt` uses `LargeTopAppBar` with no back button (home screen) — leave it alone. ## Tests Roborazzi screenshot baselines for every screen with a back button will diff. Re-record after the swap: `./gradlew recordRoborazziDebug` Affected baselines (one per screenshot test): `SettingsScreenshotTest`, `CategoriesScreenshotTest`, `ReportBugScreenshotTest`, `AddEditVehicleScreenshotTest`, `AddEditRecordScreenshotTest`, `ImageViewerScreenshotTest`, `RecordDetailScreenshotTest`, `VehicleDetailScreenshotTest`, `SetupScreenshotTest`. ## Verification checklist - `./gradlew ktlintCheck detekt lintDebug` - `./gradlew test` - `./gradlew recordRoborazziDebug` then `./gradlew verifyRoborazziDebug` - Spot-check on an emulator/device that the back button is round + tonal in light and dark themes, and that `surfaceContainerHigh` top-bar background still has enough contrast against the tonal pill.