From 1f60cf7d1ce209c581ee9da3b2ca8f67e43d1e56 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 7 Apr 2021 15:37:21 +0530 Subject: [PATCH] app: add view comments navigation action Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/ui/main/LobstersApp.kt | 21 +++++++++++++++---- .../lobsters/ui/navigation/Destination.kt | 2 ++ .../lobsters/ui/posts/LobstersItem.kt | 4 ++-- .../lobsters/ui/posts/NetworkPosts.kt | 3 ++- .../msfjarvis/lobsters/ui/posts/SavedPosts.kt | 3 ++- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt index 88f438a3..4ad6a693 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt @@ -15,14 +15,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavType import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.navArgument import androidx.navigation.compose.navigate import androidx.navigation.compose.rememberNavController import androidx.paging.LoadState import androidx.paging.compose.collectAsLazyPagingItems +import dev.msfjarvis.lobsters.ui.comments.CommentsPage import dev.msfjarvis.lobsters.ui.navigation.Destination import dev.msfjarvis.lobsters.ui.posts.NetworkPosts import dev.msfjarvis.lobsters.ui.posts.SavedPosts @@ -49,9 +52,7 @@ fun LobstersApp() { navBackStackEntry?.arguments?.getString(KEY_ROUTE) ?: Destination.startDestination.route val currentDestination = Destination.getDestinationFromRoute(currentRoute) val navigateToDestination: (destination: Destination) -> Unit = { destination -> - navController.navigate(destination.route) { - launchSingleTop = true - } + navController.navigate(destination.route) { launchSingleTop = true } } val jumpToIndex: suspend (Int, Destination) -> Unit = { index, screen -> when (screen) { @@ -93,6 +94,7 @@ fun LobstersApp() { isPostSaved = viewModel::isPostSaved, saveAction = viewModel::toggleSave, refreshAction = viewModel::reloadHottestPosts, + viewComments = { navController.navigate("comments/$it") }, ) } composable(Destination.Newest.route) { @@ -103,6 +105,7 @@ fun LobstersApp() { isPostSaved = viewModel::isPostSaved, saveAction = viewModel::toggleSave, refreshAction = viewModel::reloadNewestPosts, + viewComments = { navController.navigate("comments/$it") }, ) } composable(Destination.Saved.route) { @@ -111,6 +114,16 @@ fun LobstersApp() { saveAction = viewModel::toggleSave, modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()), sortReversed = viewModel.getSortOrder(), + viewComments = { navController.navigate("comments/$it") }, + ) + } + composable( + Destination.Comments.route, + listOf(navArgument("postId") { type = NavType.StringType }), + ) { backStackEntry -> + CommentsPage( + postId = requireNotNull(backStackEntry.arguments?.getString("postId")), + getDetails = viewModel::getPostDetails, ) } } @@ -125,7 +138,7 @@ fun LobstersBottomNav( ) { val coroutineScope = rememberCoroutineScope() BottomNavigation(modifier = Modifier.testTag("LobstersBottomNav")) { - Destination.values().forEach { screen -> + Destination.values().filter { it.bottombar }.forEach { screen -> BottomNavigationItem( icon = { IconResource( diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt index 6e219b20..810839f4 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt @@ -9,10 +9,12 @@ enum class Destination( val route: String, val labelRes: Strings, @DrawableRes val badgeRes: Int, + val bottombar: Boolean = true, ) { Hottest("hottest", Strings.HottestPosts, R.drawable.ic_whatshot_24px), Newest("newest", Strings.NewestPosts, R.drawable.ic_schedule_black_24dp), Saved("saved", Strings.SavedPosts, R.drawable.ic_favorite_24px), + Comments("comments/{postId}", Strings.OpenComments, -1, false), ; companion object { diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index 1b95f2dc..54437260 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -57,7 +57,7 @@ fun LobstersItem( post: SavedPost, isSaved: Boolean, viewPost: () -> Unit, - viewComments: () -> Unit, + viewComments: (String) -> Unit, toggleSave: () -> Unit, modifier: Modifier = Modifier, ) { @@ -87,7 +87,7 @@ fun LobstersItem( modifier = Modifier.width(8.dp), ) CommentsButton( - onClick = viewComments, + onClick = { viewComments(post.shortId) }, ) } SubmitterName( diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/NetworkPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/NetworkPosts.kt index bc93a0dd..c0df4219 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/NetworkPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/NetworkPosts.kt @@ -26,6 +26,7 @@ fun NetworkPosts( isPostSaved: (String) -> Boolean, saveAction: (SavedPost) -> Unit, refreshAction: () -> Unit, + viewComments: (String) -> Unit, ) { val urlLauncher = LocalUrlLauncher.current var isRefreshing by mutableStateOf(false) @@ -55,7 +56,7 @@ fun NetworkPosts( post = item, isSaved = isSaved, viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) }, - viewComments = { urlLauncher.launch(item.commentsUrl) }, + viewComments = viewComments, toggleSave = { isSaved = isSaved.not() saveAction.invoke(item) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt index 88e93da1..7d2f07ea 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt @@ -32,6 +32,7 @@ fun SavedPosts( sortReversed: Flow, modifier: Modifier = Modifier, saveAction: (SavedPost) -> Unit, + viewComments: (String) -> Unit, ) { val listState = rememberLazyListState() val urlLauncher = LocalUrlLauncher.current @@ -71,7 +72,7 @@ fun SavedPosts( post = item, isSaved = true, viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) }, - viewComments = { urlLauncher.launch(item.commentsUrl) }, + viewComments = viewComments, toggleSave = { saveAction.invoke(item) }, ) }