fix(nav): clear onboarding/auth back stack on entry->Home (C-NAV-001 P1)

Navigating to Home from any entry route (onboarding/profile/pair/login/signup/forgot)
now resets the stack (popUpTo(0) inclusive) so Home is the back-stack root. Previously
the graph start (ONBOARDING) lingered under Home, so system Back from Home walked
backward into the onboarding carousel -> welcome/login, making a signed-in user look
logged out. Verified: Back from Home now exits the app to the launcher.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
null 2026-06-25 09:37:36 -05:00
parent 4e49b92be2
commit ebd3b2ed1f
1 changed files with 20 additions and 0 deletions

View File

@ -124,9 +124,29 @@ fun AppNavigation(
selectTab(AppRoute.HOME)
}
}
// The pre-app entry flow (onboarding + profile/pairing setup + auth). Leaving any of
// these for Home must CLEAR them from the back stack — otherwise the graph start
// (ONBOARDING) lingers as the root under Home and a system Back from Home walks
// backward into the onboarding carousel / login screen, making a signed-in user look
// logged out (C-NAV-001).
val entryRoutes = setOf(
AppRoute.ONBOARDING,
AppRoute.CREATE_PROFILE,
AppRoute.PAIR_PROMPT,
AppRoute.LOGIN,
AppRoute.SIGN_UP,
AppRoute.FORGOT_PASSWORD
)
val navigateRoute: (String) -> Unit = { route ->
when {
route == "back" -> navigateBackOrHome()
// Completing onboarding/auth: make Home the back-stack root (wipe the entire
// entry flow) so Back from Home exits the app, never resurfaces onboarding/login.
route == AppRoute.HOME && currentRoute in entryRoutes ->
navController.navigate(AppRoute.HOME) {
popUpTo(0) { inclusive = true }
launchSingleTop = true
}
// Top-level tabs must use tab-switch semantics. Plain-navigating to a
// tab (e.g. a "Game waiting" card → PLAY) would stack it on the current
// tab; the bottom bar then saves that substack and `restoreState` later