forked from Lonami/Talaria
80 lines
2.7 KiB
Kotlin
80 lines
2.7 KiB
Kotlin
|
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.Composable
|
||
|
import androidx.compose.runtime.getValue
|
||
|
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)
|
||
|
|
||
|
Scaffold(
|
||
|
topBar = {
|
||
|
TalariaAppBar(
|
||
|
currentScreen,
|
||
|
canNavigateBack = navController.previousBackStackEntry != null,
|
||
|
navigateUp = { navController.navigateUp() }
|
||
|
)
|
||
|
}
|
||
|
) { innerPadding ->
|
||
|
NavHost(
|
||
|
navController = navController,
|
||
|
startDestination = TalariaScreen.Dialog.name,
|
||
|
Modifier.padding(innerPadding)
|
||
|
) {
|
||
|
composable(route = TalariaScreen.Dialog.name) {
|
||
|
DialogScreen(onDialogSelected = {
|
||
|
navController.navigate(TalariaScreen.Chat.name)
|
||
|
})
|
||
|
}
|
||
|
composable(route = TalariaScreen.Chat.name) {
|
||
|
ChatScreen()
|
||
|
}
|
||
|
composable(route = TalariaScreen.Login.name) {
|
||
|
LoginScreen(onConfirmOtp = {
|
||
|
navController.navigate(TalariaScreen.Dialog.name)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|