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 f4239958..fc40401c 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 @@ -34,9 +34,11 @@ fun LobstersApp() { val viewModel: LobstersViewModel = viewModel() val navController = rememberNavController() val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems() + val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems() val savedPosts by viewModel.savedPosts.collectAsState() val hottestPostsListState = rememberLazyListState() + val newestPostsListState = rememberLazyListState() val navBackStackEntry by navController.currentBackStackEntryAsState() val currentRoute = @@ -48,9 +50,20 @@ fun LobstersApp() { popUpTo(navController.graph.startDestination) { inclusive = false } } } - val jumpToIndex: suspend (Int) -> Unit = { - if (hottestPosts.loadState.refresh != LoadState.Loading) { - hottestPostsListState.animateScrollToItem(it) + val jumpToIndex: suspend (Int, Destination) -> Unit = { index, screen -> + when (screen) { + Destination.Hottest -> { + if (hottestPosts.loadState.refresh != LoadState.Loading) { + hottestPostsListState.animateScrollToItem(index) + } + } + Destination.Newest -> { + if (newestPosts.loadState.refresh != LoadState.Loading) { + newestPostsListState.animateScrollToItem(index) + } + } + else -> { + } } } @@ -80,6 +93,16 @@ fun LobstersApp() { refreshAction = viewModel::reloadHottestPosts, ) } + composable(Destination.Newest.route) { + NetworkPosts( + posts = newestPosts, + listState = newestPostsListState, + modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()), + isPostSaved = viewModel::isPostSaved, + saveAction = viewModel::toggleSave, + refreshAction = viewModel::reloadNewestPosts, + ) + } composable(Destination.Saved.route) { SavedPosts( posts = savedPosts, @@ -96,7 +119,7 @@ fun LobstersApp() { fun LobstersBottomNav( currentDestination: Destination, navigateToDestination: (destination: Destination) -> Unit, - jumpToIndex: suspend (index: Int) -> Unit, + jumpToIndex: suspend (index: Int, screen: Destination) -> Unit, ) { val coroutineScope = rememberCoroutineScope() BottomNavigation(modifier = Modifier.testTag("LobstersBottomNav")) { @@ -115,8 +138,8 @@ fun LobstersBottomNav( onClick = { if (screen != currentDestination) { navigateToDestination(screen) - } else if (screen.route == Destination.Hottest.route) { - coroutineScope.launch { jumpToIndex(0) } + } else if (screen.route != Destination.Saved.route) { + coroutineScope.launch { jumpToIndex(0, screen) } } } ) 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 0d2e65d6..7a8b4a11 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 @@ -13,6 +13,7 @@ enum class Destination( @DrawableRes val badgeRes: Int, ) { 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), ; diff --git a/app/src/main/res/drawable/ic_schedule_black_24dp.xml b/app/src/main/res/drawable/ic_schedule_black_24dp.xml new file mode 100644 index 00000000..8eecf9cb --- /dev/null +++ b/app/src/main/res/drawable/ic_schedule_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index ad774903..8af20951 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -17,6 +17,7 @@ private fun stringEnumMapper(stringEnum: Strings): Int { Strings.RemoveFromSavedPosts -> R.string.remove_from_saved_posts Strings.SavedPosts -> R.string.saved_posts Strings.SubmittedBy -> R.string.submitted_by + Strings.NewestPosts -> R.string.newest_posts } } diff --git a/common/src/androidMain/res/values/strings.xml b/common/src/androidMain/res/values/strings.xml index 0916aedb..0de8ea60 100644 --- a/common/src/androidMain/res/values/strings.xml +++ b/common/src/androidMain/res/values/strings.xml @@ -10,4 +10,5 @@ Refresh posts Open comments Change sort order + Newest diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt index 031e77dc..1edf66ab 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt @@ -12,5 +12,6 @@ enum class Strings { RemoveFromSavedPosts, SavedPosts, SubmittedBy, + NewestPosts, ; } diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index d7d6e8b7..27f54788 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -15,6 +15,7 @@ private fun stringEnumMapper(stringEnum: Strings): String { Strings.RemoveFromSavedPosts -> "Remove from saved posts" Strings.SavedPosts -> "Saved" Strings.SubmittedBy -> "submitted by %1s" + Strings.NewestPosts -> "Newest" } }