From 5b66b440ce9df9acc5157ba01a0ae99c18d89e9a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 9 Nov 2020 12:47:37 +0530 Subject: [PATCH 1/2] Separate out BottomNavigation to its own composable Signed-off-by: Harsh Shandilya --- .../lobsters/ui/main/MainActivity.kt | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index 8db25a43..75de07cf 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.platform.setContent import androidx.compose.ui.res.stringResource import androidx.compose.ui.viewinterop.viewModel +import androidx.navigation.NavHostController import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -57,26 +58,7 @@ fun LobstersApp() { Scaffold( bottomBar = { - BottomNavigation { - val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentRoute = navBackStackEntry?.arguments?.getString(KEY_ROUTE) - destinations.forEach { screen -> - BottomNavigationItem( - icon = { IconResource(resourceId = screen.badgeRes) }, - label = { Text(stringResource(id = screen.labelRes)) }, - selected = currentRoute == screen.route, - onClick = { - // This if check gives us a "singleTop" behavior where we do not create a - // second instance of the composable if we are already on that destination - if (currentRoute != screen.route) { - // This is the equivalent to popUpTo the start destination - navController.popBackStack(navController.graph.startDestination, false) - navController.navigate(screen.route) - } - } - ) - } - } + LobstersBottomNav(navController, destinations) }, ) { val hottestPostsListState = rememberLazyListState() @@ -98,3 +80,28 @@ fun LobstersApp() { } } } + +@Composable +fun LobstersBottomNav( + navController: NavHostController, + destinations: Array, +) { + BottomNavigation { + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentRoute = navBackStackEntry?.arguments?.getString(KEY_ROUTE) + destinations.forEach { screen -> + BottomNavigationItem( + icon = { IconResource(resourceId = screen.badgeRes) }, + label = { Text(stringResource(id = screen.labelRes)) }, + selected = currentRoute == screen.route, + alwaysShowLabels = false, + onClick = { + navController.popBackStack(navController.graph.startDestination, false) + if (currentRoute != screen.route) { + navController.navigate(screen.route) + } + } + ) + } + } +} From 2778c88d3ac707c0061248eb19f1a9be6b08c826 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 11 Nov 2020 20:16:59 +0530 Subject: [PATCH 2/2] Add bottom padding to list composables Signed-off-by: Harsh Shandilya --- .../java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt index 75de07cf..88638203 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/MainActivity.kt @@ -3,6 +3,7 @@ package dev.msfjarvis.lobsters.ui.main import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Text +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.BottomNavigation import androidx.compose.material.BottomNavigationItem @@ -11,6 +12,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Providers import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier import androidx.compose.ui.platform.setContent import androidx.compose.ui.res.stringResource import androidx.compose.ui.viewinterop.viewModel @@ -60,7 +62,7 @@ fun LobstersApp() { bottomBar = { LobstersBottomNav(navController, destinations) }, - ) { + ) { innerPadding -> val hottestPostsListState = rememberLazyListState() NavHost(navController, startDestination = Destination.Hottest.route) { composable(Destination.Hottest.route) { @@ -69,12 +71,14 @@ fun LobstersApp() { listState = hottestPostsListState, overscrollAction = viewModel::getMorePosts, saveAction = viewModel::savePost, + modifier = Modifier.padding(bottom = innerPadding.bottom), ) } composable(Destination.Saved.route) { SavedPosts( posts = savedPosts, saveAction = viewModel::removeSavedPost, + modifier = Modifier.padding(bottom = innerPadding.bottom), ) } }