android: move Pager into a ViewModel

This commit is contained in:
Harsh Shandilya 2021-09-25 18:13:42 +05:30
parent ddd57603bc
commit 8e96225a9d
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
6 changed files with 30 additions and 16 deletions

View file

@ -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,
)
}
}

View file

@ -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 {

View file

@ -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),
)

View file

@ -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
}