package dev.lonami.talaria import androidx.annotation.StringRes import androidx.compose.foundation.layout.padding import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import dev.lonami.talaria.ui.ChatScreen import dev.lonami.talaria.ui.DialogScreen import dev.lonami.talaria.ui.LoginScreen enum class TalariaScreen(@StringRes val title: Int) { Login(title = R.string.app_name), Dialog(title = R.string.dialog), Chat(title = R.string.chat), } @Composable fun TalariaAppBar(currentScreen: TalariaScreen, canNavigateBack: Boolean, navigateUp: () -> Unit) { TopAppBar( title = { Text(stringResource(currentScreen.title)) }, navigationIcon = { if (canNavigateBack) { IconButton(onClick = navigateUp) { Icon( imageVector = Icons.Filled.ArrowBack, contentDescription = stringResource(R.string.back_button) ) } } } ) } @Composable fun TalariaApp() { val navController = rememberNavController() val backStackEntry by navController.currentBackStackEntryAsState() val currentScreen = TalariaScreen.valueOf(backStackEntry?.destination?.route ?: TalariaScreen.Login.name) var selectedDialog by remember { mutableStateOf("") } Scaffold( topBar = { TalariaAppBar( currentScreen, canNavigateBack = navController.previousBackStackEntry != null, navigateUp = { navController.navigateUp() } ) } ) { innerPadding -> NavHost( navController = navController, startDestination = TalariaScreen.Login.name, Modifier.padding(innerPadding) ) { composable(route = TalariaScreen.Dialog.name) { DialogScreen(onDialogSelected = { selectedDialog = it navController.navigate(TalariaScreen.Chat.name) }) } composable(route = TalariaScreen.Chat.name) { ChatScreen(selectedDialog) } composable(route = TalariaScreen.Login.name) { LoginScreen(onConfirmOtp = { navController.navigate(TalariaScreen.Dialog.name) }) } } } }