mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 10:37:05 +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.activity.compose.setContent
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import dev.msfjarvis.claw.common.posts.LobstersItem
|
import androidx.paging.Pager
|
||||||
import dev.msfjarvis.claw.common.posts.TEST_POST
|
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.theme.LobstersTheme
|
||||||
|
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
@Inject lateinit var api: LobstersApi
|
||||||
|
@Inject lateinit var urlLauncher: UrlLauncher
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
val pager = Pager(PagingConfig(20)) { LobstersPagingSource(api::getHottestPosts) }
|
||||||
setContent {
|
setContent {
|
||||||
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
|
LobstersTheme(darkTheme = isSystemInDarkTheme()) {
|
||||||
LobstersItem(
|
val items = pager.flow.collectAsLazyPagingItems()
|
||||||
post = TEST_POST,
|
NetworkPosts(
|
||||||
isSaved = false,
|
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