53: Fix pagination and extract UrlLauncherAmbient r=msfjarvis a=msfjarvis

Our pagination hack currently does not update the last index field which has now been fixed. While here we also take the time to extract UrlLauncherAmbient and prepare the post list composables for tweaking from the root UI

bors r+

Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
bors[bot] 2020-10-29 11:01:46 +00:00 committed by GitHub
commit 60f6108d35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 16 deletions

View file

@ -9,8 +9,6 @@ import androidx.compose.material.BottomNavigationItem
import androidx.compose.material.Scaffold import androidx.compose.material.Scaffold
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Providers import androidx.compose.runtime.Providers
import androidx.compose.runtime.ambientOf
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.setContent import androidx.compose.ui.platform.setContent
import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.KEY_ROUTE
@ -27,10 +25,9 @@ import dev.msfjarvis.lobsters.ui.HottestPosts
import dev.msfjarvis.lobsters.ui.LobstersTheme import dev.msfjarvis.lobsters.ui.LobstersTheme
import dev.msfjarvis.lobsters.ui.SavedPosts import dev.msfjarvis.lobsters.ui.SavedPosts
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
import javax.inject.Inject import javax.inject.Inject
val UrlLauncherAmbient = ambientOf<UrlLauncher> { error("Needs to be provided") }
@AndroidEntryPoint @AndroidEntryPoint
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@Inject lateinit var urlLauncher: UrlLauncher @Inject lateinit var urlLauncher: UrlLauncher
@ -53,8 +50,6 @@ fun LobstersApp(
viewModel: LobstersViewModel viewModel: LobstersViewModel
) { ) {
val urlLauncher = UrlLauncherAmbient.current val urlLauncher = UrlLauncherAmbient.current
val posts = viewModel.posts.collectAsState()
val lastIndex = posts.value.lastIndex
val navController = rememberNavController() val navController = rememberNavController()
val destinations = arrayOf(Destination.Hottest, Destination.Saved) val destinations = arrayOf(Destination.Hottest, Destination.Saved)
@ -92,10 +87,10 @@ fun LobstersApp(
) { ) {
NavHost(navController, startDestination = Destination.Hottest.route) { NavHost(navController, startDestination = Destination.Hottest.route) {
composable(Destination.Hottest.route) { composable(Destination.Hottest.route) {
HottestPosts(lastIndex = lastIndex, urlLauncher = urlLauncher , viewModel = viewModel) HottestPosts(viewModel = viewModel)
} }
composable(Destination.Saved.route) { composable(Destination.Saved.route) {
SavedPosts(urlLauncher = urlLauncher, viewModel = viewModel) SavedPosts(viewModel = viewModel)
} }
} }
} }

View file

@ -9,16 +9,16 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.msfjarvis.lobsters.data.LobstersViewModel import dev.msfjarvis.lobsters.data.LobstersViewModel
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
@Composable @Composable
fun HottestPosts( fun HottestPosts(
lastIndex: Int,
urlLauncher: UrlLauncher,
viewModel: LobstersViewModel, viewModel: LobstersViewModel,
modifier: Modifier = Modifier,
) { ) {
val posts by viewModel.posts.collectAsState() val posts by viewModel.posts.collectAsState()
val listState = rememberLazyListState() val listState = rememberLazyListState()
val urlLauncher = UrlLauncherAmbient.current
if (posts.isEmpty()) { if (posts.isEmpty()) {
EmptyList(saved = false) EmptyList(saved = false)
@ -26,9 +26,9 @@ fun HottestPosts(
LazyColumnForIndexed( LazyColumnForIndexed(
items = posts, items = posts,
state = listState, state = listState,
modifier = Modifier.padding(horizontal = 8.dp) modifier = Modifier.padding(horizontal = 8.dp).then(modifier)
) { index, item -> ) { index, item ->
if (lastIndex == index) { if (posts.lastIndex == index) {
viewModel.getMorePosts() viewModel.getMorePosts()
} }
LobstersItem( LobstersItem(

View file

@ -9,15 +9,16 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import dev.msfjarvis.lobsters.data.LobstersViewModel import dev.msfjarvis.lobsters.data.LobstersViewModel
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
@Composable @Composable
fun SavedPosts( fun SavedPosts(
urlLauncher: UrlLauncher,
viewModel: LobstersViewModel, viewModel: LobstersViewModel,
modifier: Modifier = Modifier,
) { ) {
val posts by viewModel.savedPosts.collectAsState() val posts by viewModel.savedPosts.collectAsState()
val listState = rememberLazyListState() val listState = rememberLazyListState()
val urlLauncher = UrlLauncherAmbient.current
if (posts.isEmpty()) { if (posts.isEmpty()) {
EmptyList(saved = true) EmptyList(saved = true)
@ -25,7 +26,7 @@ fun SavedPosts(
LazyColumnFor( LazyColumnFor(
items = posts, items = posts,
state = listState, state = listState,
modifier = Modifier.padding(horizontal = 8.dp) modifier = Modifier.padding(horizontal = 8.dp).then(modifier)
) { item -> ) { item ->
LobstersItem( LobstersItem(
post = item, post = item,

View file

@ -0,0 +1,5 @@
package dev.msfjarvis.lobsters.urllauncher
import androidx.compose.runtime.ambientOf
val UrlLauncherAmbient = ambientOf<UrlLauncher> { error("Needs to be provided") }