diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e06d5fdf..99476ae1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -72,6 +72,7 @@ dependencies { implementation(Dependencies.AndroidX.Compose.foundationLayout) implementation(Dependencies.AndroidX.Compose.material) implementation(Dependencies.AndroidX.Compose.navigation) + implementation(Dependencies.AndroidX.Compose.paging) implementation(Dependencies.AndroidX.Compose.runtime) implementation(Dependencies.AndroidX.Compose.ui) implementation(Dependencies.AndroidX.Compose.uiTooling) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt b/app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt new file mode 100644 index 00000000..8c814e19 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/lobsters/data/remote/LobstersPagingSource.kt @@ -0,0 +1,26 @@ +package dev.msfjarvis.lobsters.data.remote + +import androidx.paging.PagingSource +import dev.msfjarvis.lobsters.data.api.LobstersApi +import dev.msfjarvis.lobsters.model.LobstersPost +import javax.inject.Inject + +class LobstersPagingSource @Inject constructor( + private val lobstersApi: LobstersApi, +) : PagingSource() { + + override suspend fun load(params: LoadParams): LoadResult { + return try { + val page = params.key ?: 1 + val posts = lobstersApi.getHottestPosts(page) + + LoadResult.Page( + data = posts, + prevKey = if (page == 1) null else page - 1, + nextKey = page.plus(1) + ) + } catch (e: Exception) { + LoadResult.Error(e) + } + } +} diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 110e224b..426d5f94 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -50,6 +50,7 @@ object Dependencies { const val foundationLayout = "androidx.compose.foundation:foundation-layout:$COMPOSE_VERSION" const val material = "androidx.compose.material:material:$COMPOSE_VERSION" const val navigation = "androidx.navigation:navigation-compose:1.0.0-alpha04" + const val paging = "androidx.paging:paging-compose:1.0.0-alpha03" const val runtime = "androidx.compose.runtime:runtime:$COMPOSE_VERSION" const val ui = "androidx.compose.ui:ui:$COMPOSE_VERSION" const val uiUnit = "androidx.compose.ui:ui-unit:$COMPOSE_VERSION"