MainActivity: snap to top of list when pressing hottest posts tab

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-01-25 18:44:00 +05:30
parent 7e7eff6c8e
commit 04658e99fd
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80

View file

@ -3,6 +3,7 @@ package dev.msfjarvis.lobsters.ui.main
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.BottomNavigation import androidx.compose.material.BottomNavigation
import androidx.compose.material.BottomNavigationItem import androidx.compose.material.BottomNavigationItem
@ -12,6 +13,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.Providers import androidx.compose.runtime.Providers
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.setContent import androidx.compose.ui.platform.setContent
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -33,6 +35,8 @@ import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherAmbient
import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel
import dev.msfjarvis.lobsters.util.IconResource import dev.msfjarvis.lobsters.util.IconResource
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -54,16 +58,21 @@ class MainActivity : AppCompatActivity() {
@Composable @Composable
fun LobstersApp() { fun LobstersApp() {
val viewModel: LobstersViewModel = viewModel() val viewModel: LobstersViewModel = viewModel()
val coroutineScope = rememberCoroutineScope()
val navController = rememberNavController() val navController = rememberNavController()
val hottestPosts = viewModel.posts.collectAsLazyPagingItems() val hottestPosts = viewModel.posts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPosts.collectAsState() val savedPosts by viewModel.savedPosts.collectAsState()
val hottestPostsListState = rememberLazyListState()
Scaffold( Scaffold(
bottomBar = { bottomBar = {
LobstersBottomNav(navController) LobstersBottomNav(
navController,
hottestPostsListState,
coroutineScope,
)
}, },
) { innerPadding -> ) { innerPadding ->
val hottestPostsListState = rememberLazyListState()
NavHost(navController, startDestination = Destination.startDestination.route) { NavHost(navController, startDestination = Destination.startDestination.route) {
composable(Destination.Hottest.route) { composable(Destination.Hottest.route) {
HottestPosts( HottestPosts(
@ -87,6 +96,8 @@ fun LobstersApp() {
@Composable @Composable
fun LobstersBottomNav( fun LobstersBottomNav(
navController: NavHostController, navController: NavHostController,
hottestPostsListState: LazyListState,
coroutineScope: CoroutineScope,
) { ) {
BottomNavigation { BottomNavigation {
val navBackStackEntry by navController.currentBackStackEntryAsState() val navBackStackEntry by navController.currentBackStackEntryAsState()
@ -104,6 +115,10 @@ fun LobstersBottomNav(
launchSingleTop = true launchSingleTop = true
popUpTo(navController.graph.startDestination) { inclusive = false } popUpTo(navController.graph.startDestination) { inclusive = false }
} }
} else if (screen.route == Destination.Hottest.route) {
coroutineScope.launch {
hottestPostsListState.snapToItemIndex(0)
}
} }
} }
) )