diff --git a/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt index 10d9a611..02cc51f8 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt @@ -1,7 +1,6 @@ package dev.msfjarvis.lobsters import android.os.Bundle -import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Text import androidx.compose.material.BottomNavigation @@ -9,9 +8,11 @@ import androidx.compose.material.BottomNavigationItem import androidx.compose.material.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.Providers +import androidx.compose.runtime.collectAsState 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.compose.KEY_ROUTE import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -32,14 +33,13 @@ import javax.inject.Inject @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var urlLauncher: UrlLauncher - private val viewModel: LobstersViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Providers(UrlLauncherAmbient provides urlLauncher) { LobstersTheme { - LobstersApp(viewModel) + LobstersApp() } } } @@ -47,11 +47,12 @@ class MainActivity : AppCompatActivity() { } @Composable -fun LobstersApp( - viewModel: LobstersViewModel, -) { +fun LobstersApp() { + val viewModel: LobstersViewModel = viewModel() val navController = rememberNavController() val destinations = arrayOf(Destination.Hottest, Destination.Saved) + val hottestPosts by viewModel.posts.collectAsState() + val savedPosts by viewModel.savedPosts.collectAsState() Scaffold( bottomBar = { @@ -86,10 +87,17 @@ fun LobstersApp( ) { NavHost(navController, startDestination = Destination.Hottest.route) { composable(Destination.Hottest.route) { - HottestPosts(viewModel = viewModel) + HottestPosts( + posts = hottestPosts, + saveAction = viewModel::savePost, + overscrollAction = viewModel::getMorePosts, + ) } composable(Destination.Saved.route) { - SavedPosts(viewModel = viewModel) + SavedPosts( + posts = savedPosts, + saveAction = viewModel::removeSavedPost, + ) } } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/HottestPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/HottestPosts.kt index 09f003c6..a123a815 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/HottestPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/HottestPosts.kt @@ -4,19 +4,18 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumnForIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import dev.msfjarvis.lobsters.data.LobstersViewModel +import dev.msfjarvis.lobsters.model.LobstersPost import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient @Composable fun HottestPosts( - viewModel: LobstersViewModel, + posts: List, modifier: Modifier = Modifier, + saveAction: (LobstersPost) -> Unit, + overscrollAction: () -> Unit, ) { - val posts by viewModel.posts.collectAsState() val listState = rememberLazyListState() val urlLauncher = UrlLauncherAmbient.current @@ -29,13 +28,13 @@ fun HottestPosts( modifier = Modifier.padding(horizontal = 8.dp).then(modifier) ) { index, item -> if (posts.lastIndex == index) { - viewModel.getMorePosts() + overscrollAction.invoke() } LobstersItem( post = item, linkOpenAction = { post -> urlLauncher.launch(post.url.ifEmpty { post.commentsUrl }) }, commentOpenAction = { post -> urlLauncher.launch(post.commentsUrl) }, - saveAction = viewModel::savePost + saveAction = saveAction, ) } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/SavedPosts.kt index 06a4fb9d..cceef9d8 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/SavedPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/SavedPosts.kt @@ -4,19 +4,17 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumnFor import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import dev.msfjarvis.lobsters.data.LobstersViewModel +import dev.msfjarvis.lobsters.model.LobstersPost import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient @Composable fun SavedPosts( - viewModel: LobstersViewModel, + posts: List, modifier: Modifier = Modifier, + saveAction: (LobstersPost) -> Unit ) { - val posts by viewModel.savedPosts.collectAsState() val listState = rememberLazyListState() val urlLauncher = UrlLauncherAmbient.current @@ -32,7 +30,7 @@ fun SavedPosts( post = item, linkOpenAction = { post -> urlLauncher.launch(post.url.ifEmpty { post.commentsUrl }) }, commentOpenAction = { post -> urlLauncher.launch(post.commentsUrl) }, - saveAction = viewModel::removeSavedPost + saveAction = saveAction, ) } }