feat: Enhance back navigation in AuthFlow and add back button in WelcomeScreen for better user experience

This commit is contained in:
k1ngsterr1
2026-01-09 23:59:34 +05:00
parent 1b860e1c3e
commit a14e2589b0
3 changed files with 39 additions and 6 deletions

View File

@@ -37,15 +37,22 @@ fun AuthFlow(
var showCreateModal by remember { mutableStateOf(false) } var showCreateModal by remember { mutableStateOf(false) }
// Handle system back button // Handle system back button
BackHandler(enabled = currentScreen != AuthScreen.UNLOCK && currentScreen != AuthScreen.WELCOME) { BackHandler(enabled = currentScreen != AuthScreen.UNLOCK && !(currentScreen == AuthScreen.WELCOME && !hasExistingAccount)) {
when (currentScreen) { when (currentScreen) {
AuthScreen.SEED_PHRASE -> currentScreen = AuthScreen.WELCOME AuthScreen.WELCOME -> {
if (hasExistingAccount) currentScreen = AuthScreen.UNLOCK
}
AuthScreen.SEED_PHRASE -> {
currentScreen = if (hasExistingAccount) AuthScreen.WELCOME else AuthScreen.WELCOME
}
AuthScreen.CONFIRM_SEED -> currentScreen = AuthScreen.SEED_PHRASE AuthScreen.CONFIRM_SEED -> currentScreen = AuthScreen.SEED_PHRASE
AuthScreen.SET_PASSWORD -> { AuthScreen.SET_PASSWORD -> {
currentScreen = if (hasExistingAccount) AuthScreen.UNLOCK else AuthScreen.CONFIRM_SEED currentScreen = if (hasExistingAccount) AuthScreen.UNLOCK else AuthScreen.CONFIRM_SEED
} }
AuthScreen.IMPORT_SEED -> currentScreen = AuthScreen.WELCOME AuthScreen.IMPORT_SEED -> {
else -> {} // UNLOCK and WELCOME don't have back navigation currentScreen = if (hasExistingAccount) AuthScreen.WELCOME else AuthScreen.WELCOME
}
else -> {} // UNLOCK doesn't have back navigation
} }
} }
@@ -84,6 +91,8 @@ fun AuthFlow(
AuthScreen.WELCOME -> { AuthScreen.WELCOME -> {
WelcomeScreen( WelcomeScreen(
isDarkTheme = isDarkTheme, isDarkTheme = isDarkTheme,
hasExistingAccount = hasExistingAccount,
onBack = { currentScreen = AuthScreen.UNLOCK },
onCreateSeed = { currentScreen = AuthScreen.SEED_PHRASE }, onCreateSeed = { currentScreen = AuthScreen.SEED_PHRASE },
onImportSeed = { currentScreen = AuthScreen.IMPORT_SEED } onImportSeed = { currentScreen = AuthScreen.IMPORT_SEED }
) )

View File

@@ -35,6 +35,8 @@ val AuthSurfaceLight = Color(0xFFF5F5F5)
@Composable @Composable
fun WelcomeScreen( fun WelcomeScreen(
isDarkTheme: Boolean, isDarkTheme: Boolean,
hasExistingAccount: Boolean = false,
onBack: () -> Unit = {},
onCreateSeed: () -> Unit, onCreateSeed: () -> Unit,
onImportSeed: () -> Unit onImportSeed: () -> Unit
) { ) {
@@ -67,6 +69,22 @@ fun WelcomeScreen(
.fillMaxSize() .fillMaxSize()
.background(backgroundColor) .background(backgroundColor)
) { ) {
// Back button when coming from UnlockScreen
if (hasExistingAccount) {
IconButton(
onClick = onBack,
modifier = Modifier
.statusBarsPadding()
.padding(4.dp)
) {
Icon(
Icons.Default.ArrowBack,
contentDescription = "Back",
tint = textColor
)
}
}
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()

View File

@@ -436,8 +436,12 @@ fun ChatsListScreen(
.clip(RoundedCornerShape(12.dp)) .clip(RoundedCornerShape(12.dp))
.background(Color(0x20FF3B30)) .background(Color(0x20FF3B30))
.clickable { .clickable {
scope.launch { drawerState.close() } scope.launch {
onLogout() drawerState.close()
// Wait for drawer to close before logout
kotlinx.coroutines.delay(150)
onLogout()
}
} }
.padding(horizontal = 16.dp, vertical = 12.dp), .padding(horizontal = 16.dp, vertical = 12.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
@@ -484,6 +488,7 @@ fun ChatsListScreen(
animationSpec = tween(400) animationSpec = tween(400)
) )
) { ) {
key(isDarkTheme) {
TopAppBar( TopAppBar(
navigationIcon = { navigationIcon = {
IconButton( IconButton(
@@ -704,6 +709,7 @@ fun ChatsListScreen(
actionIconContentColor = textColor actionIconContentColor = textColor
) )
) )
}
} }
}, },
floatingActionButton = { floatingActionButton = {