From 0ce95ef770435ef3856c4485d58846aa50ba1e87 Mon Sep 17 00:00:00 2001 From: Sasikanth Miriyampalli Date: Sun, 20 Feb 2022 16:43:42 +0530 Subject: [PATCH] Show back button in appbar when current destination is not in nav items (#301) * Add navigation icon support in `ClawAppBar` * Show back icon in app bar when current destination is not in nav items * Add title support in `ClawAppBar` * Show title in app bar only if the current destination is present in nav items --- .../msfjarvis/claw/android/ui/LobstersApp.kt | 22 +++++++++++++++++++ .../claw/android/ui/decorations/ClawAppBar.kt | 14 ++++-------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt index 7252c32a..68daa612 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt @@ -2,9 +2,14 @@ package dev.msfjarvis.claw.android.ui import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -19,6 +24,8 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -107,6 +114,21 @@ fun LobstersApp( modifier = Modifier.statusBarsPadding(), backgroundColor = systemBarsColor, scrollBehavior = scrollBehavior, + navigationIcon = { + if (navItems.none { it.route == currentDestination }) { + IconButton(onClick = { navController.popBackStack() }) { + Icon( + imageVector = Icons.Filled.ArrowBack, + contentDescription = "Go back to previous screen" + ) + } + } + }, + title = { + if (navItems.any { it.route == currentDestination }) { + Text(text = stringResource(R.string.app_name), fontWeight = FontWeight.Bold) + } + } ) }, bottomBar = { diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawAppBar.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawAppBar.kt index dfd62abf..ebc5f765 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawAppBar.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawAppBar.kt @@ -1,31 +1,25 @@ package dev.msfjarvis.claw.android.ui.decorations import androidx.compose.material3.SmallTopAppBar -import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import dev.msfjarvis.claw.android.R @Composable fun ClawAppBar( backgroundColor: Color, scrollBehavior: TopAppBarScrollBehavior? = null, + navigationIcon: @Composable () -> Unit = {}, + title: @Composable () -> Unit = {}, modifier: Modifier = Modifier, ) { SmallTopAppBar( - title = { - Text( - text = stringResource(R.string.app_name), - fontWeight = FontWeight.Bold, - ) - }, + title = title, modifier = modifier, colors = TopAppBarDefaults.smallTopAppBarColors(containerColor = backgroundColor), scrollBehavior = scrollBehavior, + navigationIcon = navigationIcon ) }