android: add paging setup

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-06-05 03:36:13 +05:30
parent 46ef1d5567
commit 9c451ae57b
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 32 additions and 7 deletions

View file

@ -4,16 +4,12 @@ plugins {
kotlin("android")
}
group = "dev.msfjarvis.claw"
version = "1.0"
repositories { google() }
dependencies {
implementation(projects.api)
implementation(projects.common)
implementation("androidx.appcompat:appcompat:1.4.0-alpha02")
implementation("androidx.activity:activity-compose:1.3.0-beta01")
implementation("androidx.appcompat:appcompat:1.4.0-alpha02")
implementation("androidx.paging:paging-compose:1.0.0-alpha10")
}
android {

View file

@ -0,0 +1,29 @@
package dev.msfjarvis.claw.android.paging
import androidx.paging.PagingSource
import androidx.paging.PagingState
import dev.msfjarvis.claw.api.model.LobstersPost
class LobstersPagingSource(
private val getMorePosts: suspend (Int) -> List<LobstersPost>,
) : PagingSource<Int, LobstersPost>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, LobstersPost> {
return try {
val page = params.key ?: 1
val posts = getMorePosts(page)
LoadResult.Page(
data = posts,
prevKey = if (page == 1) null else page - 1,
nextKey = page.plus(1)
)
} catch (e: Exception) {
LoadResult.Error(e)
}
}
override fun getRefreshKey(state: PagingState<Int, LobstersPost>): Int {
return state.pages.size + 1
}
}