feat: Enhance back navigation in AuthFlow and add back button in WelcomeScreen for better user experience
This commit is contained in:
@@ -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 }
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
Reference in New Issue
Block a user