From 0c57d0b7e701efe35c984649d2c82155962efb89 Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Thu, 24 Apr 2025 21:46:03 +0300 Subject: [PATCH] feat: add TopAppBar --- .../sweetbread/unn/ui/layout/MainActivity.kt | 41 ++++++++++++++----- app/src/main/res/values-ru/strings.xml | 7 ++++ app/src/main/res/values/strings.xml | 7 ++++ 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/ru/sweetbread/unn/ui/layout/MainActivity.kt b/app/src/main/java/ru/sweetbread/unn/ui/layout/MainActivity.kt index 2d909ba..7723ffc 100644 --- a/app/src/main/java/ru/sweetbread/unn/ui/layout/MainActivity.kt +++ b/app/src/main/java/ru/sweetbread/unn/ui/layout/MainActivity.kt @@ -16,20 +16,21 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AccountBox import androidx.compose.material.icons.filled.DateRange import androidx.compose.material.icons.filled.Home +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.core.view.WindowCompat import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController import io.ktor.client.HttpClient import io.ktor.client.engine.android.Android @@ -39,11 +40,13 @@ import io.ktor.client.plugins.cache.HttpCache import io.ktor.client.plugins.logging.LogLevel import io.ktor.client.plugins.logging.Logger import io.ktor.client.plugins.logging.Logging +import ru.sweetbread.unn.R import ru.sweetbread.unn.db.AppDatabase import ru.sweetbread.unn.ui.composes.Blogposts import ru.sweetbread.unn.ui.composes.Schedule import ru.sweetbread.unn.ui.theme.UNNTheme import splitties.arch.room.roomDb +import splitties.resources.appStr import splitties.toast.toast val client = HttpClient(Android) { @@ -72,6 +75,7 @@ val db = roomDb(name = "database") class MainActivity : ComponentActivity() { + @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -81,15 +85,31 @@ class MainActivity : ComponentActivity() { UNNTheme { Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { val navController = rememberNavController() - var route by remember { mutableStateOf("portal/blogposts") } + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.destination?.route Scaffold( + topBar = { + CenterAlignedTopAppBar ( + title = { + Text( + when { + currentRoute?.startsWith("portal/") == true -> appStr(R.string.news) + currentRoute?.startsWith("journal/") == true -> appStr(R.string.schedule) + else -> appStr(R.string.app_name) + }, + Modifier.padding() + ) + } + ) + }, bottomBar = { NavigationBar { NavigationBarItem( onClick = { - route = "portal/blogposts" - navController.navigate(route) + navController.navigate("portal/blogposts") { + launchSingleTop = true + } }, icon = { Icon( @@ -97,13 +117,14 @@ class MainActivity : ComponentActivity() { contentDescription = "Home" ) }, - selected = route.startsWith("portal/") + selected = currentRoute?.startsWith("portal/") == true ) NavigationBarItem( onClick = { - route = "journal/schedule" - navController.navigate(route) + navController.navigate("journal/schedule") { + launchSingleTop = true + } }, icon = { Icon( @@ -111,7 +132,7 @@ class MainActivity : ComponentActivity() { contentDescription = "Schedule" ) }, - selected = route.startsWith("journal/") + selected = currentRoute?.startsWith("journal/") == true ) NavigationBarItem( diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 04b05b7..fa433db 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,4 +1,9 @@ + + ННГУ ННГУ Альфа @@ -14,4 +19,6 @@ Здание Этаж Нет данных + Новости + Расписание \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3912867..ee2c9e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,8 @@ + + UNN UNN Dev @@ -16,5 +21,7 @@ Floor Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel iaculis elit. Aliquam varius urna ut nisl rhoncus ullamcorper. Maecenas et nisl at dui mollis maximus nec in libero. Ut eu nulla id felis hendrerit lobortis. Maecenas vel facilisis lectus. Morbi eleifend massa a ante consequat, eu aliquam elit euismod. Aenean quis erat tincidunt, egestas ligula id, convallis tortor. Vivamus volutpat condimentum nisl sed eleifend. Aenean dapibus dolor ut orci lobortis, placerat lobortis tortor pretium. Nam eros lectus, convallis sed ultricies sit amet, lacinia sed sem. In mi odio, porta non malesuada et, cursus a metus. Morbi quis odio sed quam commodo gravida id sit amet dolor. Donec ac iaculis massa. Nulla mauris sapien, auctor consequat est in, tempus accumsan ipsum. Donec semper volutpat nisi. Quisque dignissim tellus ipsum, sed malesuada libero aliquam sed. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam eleifend pharetra orci eu scelerisque. In hac habitasse platea dictumst. Sed non neque vitae metus porttitor vestibulum ut eget felis. Aliquam venenatis a magna eu mattis. Proin rutrum, sapien id viverra finibus, nisi quam aliquam eros, et dignissim lectus sem sit amet purus. Donec et semper enim, sed pretium lacus. Nullam venenatis ullamcorper maximus. Mauris pellentesque velit non sem sollicitudin molestie. Duis hendrerit consequat enim eget euismod. No Data + News + Schedule \ No newline at end of file