From 2b638fcc2948b7b01f39fa4b058f443ab873fa7a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 7 Feb 2022 11:30:26 +0530 Subject: [PATCH] android: hide NavigationBar in comments screen --- .../msfjarvis/claw/android/ui/LobstersApp.kt | 1 + .../claw/android/ui/decorations/ClawFab.kt | 3 +- .../ui/decorations/ClawNavigationBar.kt | 47 ++++++++++++++----- .../dev/msfjarvis/claw/android/ui/ext.kt | 2 + 4 files changed, 40 insertions(+), 13 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 0cd565bb..47f048d7 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 @@ -106,6 +106,7 @@ fun LobstersApp( ClawNavigationBar( navController = navController, items = navItems, + isVisible = navItems.any { it.route == currentDestination }, ) }, ) { diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawFab.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawFab.kt index 13d30485..3a0b6099 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawFab.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawFab.kt @@ -15,10 +15,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import dev.msfjarvis.claw.android.R +import dev.msfjarvis.claw.android.ui.AnimationDuration import kotlinx.coroutines.launch -private const val AnimationDuration = 100 - @OptIn(ExperimentalAnimationApi::class) @Composable fun ClawFab( diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt index 03a08f92..14857741 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/decorations/ClawNavigationBar.kt @@ -1,5 +1,11 @@ package dev.msfjarvis.claw.android.ui.decorations +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.FastOutLinearInEasing +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.tween +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically import androidx.compose.material3.Icon import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem @@ -12,26 +18,45 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.navigation.NavController +import dev.msfjarvis.claw.android.ui.AnimationDuration @Composable fun ClawNavigationBar( navController: NavController, items: List, + isVisible: Boolean, modifier: Modifier = Modifier, ) { var selectedIndex by remember { mutableStateOf(0) } - NavigationBar(modifier = modifier) { - items.forEachIndexed { index, navItem -> - NavigationBarItem( - icon = { Icon(painter = navItem.icon, contentDescription = navItem.label) }, - label = { Text(text = navItem.label) }, - selected = selectedIndex == index, - onClick = { - selectedIndex = index - navController.navigate(navItem.route) - } - ) + AnimatedVisibility( + visible = isVisible, + enter = + slideInVertically( + // Enters by sliding up from offset 0 to fullHeight. + initialOffsetY = { fullHeight -> fullHeight }, + animationSpec = tween(durationMillis = AnimationDuration, easing = LinearOutSlowInEasing), + ), + exit = + slideOutVertically( + // Exits by sliding up from offset 0 to -fullHeight. + targetOffsetY = { fullHeight -> fullHeight }, + animationSpec = tween(durationMillis = AnimationDuration, easing = FastOutLinearInEasing), + ), + modifier = Modifier, + ) { + NavigationBar(modifier = modifier) { + items.forEachIndexed { index, navItem -> + NavigationBarItem( + icon = { Icon(painter = navItem.icon, contentDescription = navItem.label) }, + label = { Text(text = navItem.label) }, + selected = selectedIndex == index, + onClick = { + selectedIndex = index + navController.navigate(navItem.route) + } + ) + } } } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt index 40096493..76b7f7d2 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/ext.kt @@ -27,6 +27,8 @@ import dev.msfjarvis.claw.common.urllauncher.UrlLauncher import dev.msfjarvis.claw.database.local.SavedPost import kotlin.math.ln +const val AnimationDuration = 100 + // The destination needs to be tracked like this rather than used directly since // `NavController#currentDestination` is not a Composable state. @Composable