mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 22:17:03 +05:30
android: integrate with Paging
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
3cae306c0c
commit
010983ccba
3 changed files with 66 additions and 8 deletions
|
@ -4,21 +4,31 @@ import android.os.Bundle
|
|||
import androidx.activity.compose.setContent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import dev.msfjarvis.claw.common.posts.LobstersItem
|
||||
import dev.msfjarvis.claw.common.posts.TEST_POST
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
|
||||
import dev.msfjarvis.claw.android.ui.NetworkPosts
|
||||
import dev.msfjarvis.claw.api.LobstersApi
|
||||
import dev.msfjarvis.claw.common.theme.LobstersTheme
|
||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : AppCompatActivity() {
|
||||
@Inject lateinit var api: LobstersApi
|
||||
@Inject lateinit var urlLauncher: UrlLauncher
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
|
||||
setContent {
|
||||
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
|
||||
LobstersItem(
|
||||
post = TEST_POST,
|
||||
isSaved = false,
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
val items = pager.flow.collectAsLazyPagingItems()
|
||||
NetworkPosts(
|
||||
items = items,
|
||||
urlLauncher = urlLauncher,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package dev.msfjarvis.claw.android.ext
|
||||
|
||||
import dev.msfjarvis.claw.api.model.LobstersPost
|
||||
import dev.msfjarvis.claw.database.local.SavedPost
|
||||
|
||||
/** Convert a [LobstersPost] object returned by the API into a [SavedPost] for persistence. */
|
||||
fun LobstersPost.toDbModel(): SavedPost {
|
||||
return SavedPost(
|
||||
shortId = shortId,
|
||||
title = title,
|
||||
url = url,
|
||||
createdAt = createdAt,
|
||||
commentsUrl = commentsUrl,
|
||||
submitterName = submitter.username,
|
||||
submitterAvatarUrl = submitter.avatarUrl,
|
||||
tags = tags,
|
||||
)
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package dev.msfjarvis.claw.android.ui
|
||||
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.paging.compose.LazyPagingItems
|
||||
import androidx.paging.compose.items
|
||||
import dev.msfjarvis.claw.android.ext.toDbModel
|
||||
import dev.msfjarvis.claw.api.model.LobstersPost
|
||||
import dev.msfjarvis.claw.common.posts.LobstersItem
|
||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||
|
||||
@Composable
|
||||
fun NetworkPosts(
|
||||
items: LazyPagingItems<LobstersPost>,
|
||||
urlLauncher: UrlLauncher,
|
||||
) {
|
||||
LazyColumn {
|
||||
items(items) { item ->
|
||||
if (item != null) {
|
||||
LobstersItem(
|
||||
post = item.toDbModel(),
|
||||
isSaved = false,
|
||||
viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) },
|
||||
viewComments = { urlLauncher.launch(item.commentsUrl) },
|
||||
toggleSave = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue