From eb058cfa3d3daf2ffa092850dbe7e377db701bd5 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 23 Sep 2022 16:42:39 +0530 Subject: [PATCH] refactor(android): abstract away `getMorePosts` type --- .../msfjarvis/claw/android/paging/LobstersPagingSource.kt | 6 +++--- .../dev/msfjarvis/claw/android/paging/RemoteFetcher.kt | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/paging/RemoteFetcher.kt diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt index e50cf193..92d6f7df 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt @@ -13,14 +13,14 @@ import kotlinx.coroutines.withContext class LobstersPagingSource @AssistedInject constructor( - @Assisted private val getMorePosts: suspend (Int) -> List, + @Assisted private val remoteFetcher: RemoteFetcher, @IODispatcher private val ioDispatcher: CoroutineDispatcher, ) : PagingSource() { override suspend fun load(params: LoadParams): LoadResult { return try { val page = params.key ?: 1 - val posts = withContext(ioDispatcher) { getMorePosts(page) } + val posts = withContext(ioDispatcher) { remoteFetcher.getItemsAtPage(page) } LoadResult.Page( data = posts, @@ -38,6 +38,6 @@ constructor( @AssistedFactory interface Factory { - fun create(getMorePosts: suspend (Int) -> List): LobstersPagingSource + fun create(remoteFetcher: RemoteFetcher): LobstersPagingSource } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/RemoteFetcher.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/RemoteFetcher.kt new file mode 100644 index 00000000..a59e550b --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/RemoteFetcher.kt @@ -0,0 +1,6 @@ +package dev.msfjarvis.claw.android.paging + +/** SAM interface to abstract over a remote API that fetches paginated content. */ +fun interface RemoteFetcher { + suspend fun getItemsAtPage(page: Int): List +}