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:
@@ -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() }
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user