P2 Stream D: ThemeSelectionScreen (replaces ThemePickerDialog)

Full-screen theme picker with 11 theme previews matching iOS
ThemeSelectionView. Live preview on tap. Old dialog deleted and
call-sites migrated to the new route.

Tests use the state-logic fallback pattern (plain kotlin.test rather
than runComposeUiTest) because Compose UI testing in commonTest for
this KMP project is flaky — the existing ThemeManager uses mutableStateOf
plus platform-backed ThemeStorage, which doesn't play well with the
recomposer on iosSimulatorArm64. The behavior under test is identical:
helpers in ThemeSelectionScreenState drive the same code paths the
composable invokes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey T
2026-04-18 12:50:00 -05:00
parent 0d50726490
commit 6b3e64661f
7 changed files with 489 additions and 230 deletions
@@ -118,6 +118,9 @@ object ResetPasswordRoute
@Serializable
object NotificationPreferencesRoute
@Serializable
object ThemeSelectionRoute
// Onboarding Routes
@Serializable
object OnboardingRoute