Audit: form-error TalkBack + focus management + navigateUp polish

(a) liveRegion + error semantics on form error surfaces so TalkBack
    announces them when they appear:
    - Shared ErrorCard (used by LoginScreen, RegisterScreen,
      VerifyEmail/ResetCode, ForgotPassword, ResetPassword)
    - OnboardingCreateAccountContent inline error row
    - JoinResidenceScreen inline error row

(b) focusRequester + ImeAction.Next on multi-field forms:
    - LoginScreen: auto-focus username, Next→password, Done→submit
    - RegisterScreen: auto-focus username, Next chain through
      email/password/confirm, Done on last

(c) navigateUp() replaces navController.popBackStack() for simple back
    actions in App.kt (6 screens) and MainScreen.kt (3 screens), where
    the back behavior is purely navigation-controlled.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey T
2026-04-18 18:16:22 -05:00
parent a1f366cb30
commit bb4cbd58c3
7 changed files with 110 additions and 18 deletions
@@ -511,7 +511,7 @@ fun App(
composable<JoinResidenceRoute> {
com.tt.honeyDue.ui.screens.residence.JoinResidenceScreen(
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
onJoined = { residenceId ->
navController.popBackStack()
navController.navigate(ResidenceDetailRoute(residenceId))
@@ -674,7 +674,7 @@ fun App(
composable<FeatureComparisonRoute> {
// P2 Stream E — full-screen Free vs. Pro comparison.
FeatureComparisonScreen(
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
onNavigateToUpgrade = {
navController.popBackStack()
navController.navigate(UpgradeRoute)
@@ -687,7 +687,7 @@ fun App(
val route = backStackEntry.toRoute<TaskSuggestionsRoute>()
TaskSuggestionsScreen(
residenceId = route.residenceId,
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
)
}
@@ -696,7 +696,7 @@ fun App(
val route = backStackEntry.toRoute<AddTaskWithResidenceRoute>()
AddTaskWithResidenceScreen(
residenceId = route.residenceId,
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
onCreated = { navController.popBackStack() },
)
}
@@ -707,7 +707,7 @@ fun App(
TaskTemplatesBrowserScreen(
residenceId = route.residenceId,
fromOnboarding = route.fromOnboarding,
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
)
}
@@ -734,7 +734,7 @@ fun App(
updatedAt = route.updatedAt,
completions = emptyList()
),
onNavigateBack = { navController.popBackStack() },
onNavigateBack = { navController.navigateUp() },
onTaskUpdated = { navController.popBackStack() }
)
}