From 9c451ae57b2291178a750b22870e6f08707dbb53 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 5 Jun 2021 03:36:13 +0530 Subject: [PATCH] android: add paging setup Signed-off-by: Harsh Shandilya --- android/build.gradle.kts | 10 ++----- .../android/paging/LobstersPagingSource.kt | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 android/src/main/java/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt diff --git a/android/build.gradle.kts b/android/build.gradle.kts index f4743abd..877986d1 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -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 { diff --git a/android/src/main/java/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt b/android/src/main/java/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt new file mode 100644 index 00000000..5ab7533a --- /dev/null +++ b/android/src/main/java/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt @@ -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, +) : PagingSource() { + + override suspend fun load(params: LoadParams): LoadResult { + 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 { + return state.pages.size + 1 + } +}