mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 18:47:03 +05:30
android: move Pager into a ViewModel
This commit is contained in:
parent
ddd57603bc
commit
8e96225a9d
6 changed files with 30 additions and 16 deletions
|
@ -17,6 +17,7 @@ dependencies {
|
|||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.appcompat)
|
||||
implementation(libs.androidx.coreKtx)
|
||||
implementation(libs.androidx.lifecycle.compose)
|
||||
implementation(libs.androidx.paging.compose)
|
||||
implementation(libs.dagger.hilt.android)
|
||||
implementation(libs.retrofit.moshiConverter)
|
||||
|
|
|
@ -4,29 +4,22 @@ import android.os.Bundle
|
|||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
|
||||
import dev.msfjarvis.claw.android.ui.LobstersApp
|
||||
import dev.msfjarvis.claw.api.LobstersApi
|
||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : ComponentActivity() {
|
||||
@Inject lateinit var api: LobstersApi
|
||||
|
||||
@Inject lateinit var urlLauncher: UrlLauncher
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
|
||||
setContent {
|
||||
LobstersApp(
|
||||
pager,
|
||||
urlLauncher,
|
||||
urlLauncher = urlLauncher,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,19 +15,19 @@ import androidx.compose.runtime.SideEffect
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.paging.LoadState
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import com.google.accompanist.insets.ProvideWindowInsets
|
||||
import com.google.accompanist.insets.statusBarsPadding
|
||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||
import dev.msfjarvis.claw.api.model.LobstersPost
|
||||
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
|
||||
import dev.msfjarvis.claw.common.theme.LobstersTheme
|
||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||
|
||||
@Composable
|
||||
fun LobstersApp(
|
||||
pager: Pager<Int, LobstersPost>,
|
||||
viewModel: ClawViewModel = viewModel(),
|
||||
urlLauncher: UrlLauncher,
|
||||
) {
|
||||
val systemUiController = rememberSystemUiController()
|
||||
|
@ -40,7 +40,7 @@ fun LobstersApp(
|
|||
SideEffect {
|
||||
systemUiController.setSystemBarsColor(color = systemBarsColor, darkIcons = useDarkIcons)
|
||||
}
|
||||
val items = pager.flow.collectAsLazyPagingItems()
|
||||
val items = viewModel.pagerFlow.collectAsLazyPagingItems()
|
||||
Scaffold(
|
||||
scaffoldState = scaffoldState,
|
||||
topBar = { ClawAppBar(modifier = Modifier.statusBarsPadding()) },
|
||||
|
@ -49,7 +49,7 @@ fun LobstersApp(
|
|||
if (items.loadState.refresh != LoadState.Loading) {
|
||||
NetworkPosts(
|
||||
items = items,
|
||||
urlLauncher = urlLauncher,
|
||||
launchUrl = urlLauncher::launch,
|
||||
modifier = Modifier.padding(top = 16.dp),
|
||||
)
|
||||
} else {
|
||||
|
|
|
@ -15,7 +15,7 @@ import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
|||
@Composable
|
||||
fun NetworkPosts(
|
||||
items: LazyPagingItems<LobstersPost>,
|
||||
urlLauncher: UrlLauncher,
|
||||
launchUrl: (String) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
LazyColumn(
|
||||
|
@ -26,8 +26,8 @@ fun NetworkPosts(
|
|||
LobstersCard(
|
||||
post = item.toDbModel(),
|
||||
isSaved = false,
|
||||
viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) },
|
||||
viewComments = { urlLauncher.launch(item.commentsUrl) },
|
||||
viewPost = { launchUrl(item.url.ifEmpty { item.commentsUrl }) },
|
||||
viewComments = { launchUrl(item.commentsUrl) },
|
||||
toggleSave = {},
|
||||
modifier = Modifier.padding(bottom = 16.dp, start = 16.dp, end = 16.dp),
|
||||
)
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package dev.msfjarvis.claw.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
|
||||
import dev.msfjarvis.claw.api.LobstersApi
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class ClawViewModel @Inject constructor(
|
||||
api: LobstersApi,
|
||||
) : ViewModel() {
|
||||
private val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
|
||||
|
||||
val pagerFlow
|
||||
get() = pager.flow
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue