paging: Merge and rename methods

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-09-22 12:58:51 +08:00
parent 851211b4af
commit 78d029b8e8
4 changed files with 26 additions and 16 deletions

View File

@@ -15,7 +15,7 @@ import kotlinx.coroutines.withContext
/**
* A generic paging source that is supposed to be able to load any type of data
*
* Consider calling [createPager] method to create an instance of [Pager] instead of interacting
* Consider calling [pager] method to create an instance of [Pager] instead of interacting
* with the class directly.
* @param block Data to load into the pager
*/
@@ -27,12 +27,28 @@ class GenericPagingSource<T : Any>(
private const val DEFAULT_PAGE_SIZE = 20
/**
* Method to dynamically create and manage pager objects
* Method to create pager objects using [PagingSource]
* @param pageSize Size of the page
* @param enablePlaceholders Whether placeholders should be shown
* @param data Data to load into the pager
* @see manualPager
*/
fun <T : Any> pager(
pageSize: Int = DEFAULT_PAGE_SIZE,
enablePlaceholders: Boolean = true,
data: () -> PagingSource<Int, T>
): Pager<Int, T> = Pager(
config = PagingConfig(enablePlaceholders = enablePlaceholders, pageSize = pageSize),
pagingSourceFactory = { data() }
)
/**
* Method to create and manage pager objects manually
* @param pageSize Size of the page
* @param enablePlaceholders Whether placeholders should be shown
* @param data Data to load into the pager
*/
fun <T : Any> createPager(
fun <T : Any> manualPager(
pageSize: Int = DEFAULT_PAGE_SIZE,
enablePlaceholders: Boolean = true,
data: suspend (Int) -> List<T>

View File

@@ -12,7 +12,7 @@ import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.store.data.paging.GenericPagingSource
import com.aurora.store.data.paging.GenericPagingSource.Companion.manualPager
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -46,7 +46,7 @@ class ReviewViewModel @AssistedInject constructor(
fun fetchReviews(filter: Review.Filter = Review.Filter.ALL) {
var reviewsNextPageUrl: String? = null
GenericPagingSource.Companion.createPager { page ->
manualPager { page ->
try {
when (page) {
1 -> reviewsHelper.getReviews(packageName, filter).also {

View File

@@ -10,12 +10,11 @@ import android.net.Uri
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.paging.GenericPagingSource.Companion.pager
import com.aurora.store.data.room.download.Download
import com.aurora.store.data.work.ExportWorker
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -88,13 +87,8 @@ class DownloadsViewModel @Inject constructor(
}
private fun getPagedDownloads() {
Pager(
config = PagingConfig(
pageSize = 20,
enablePlaceholders = true
),
pagingSourceFactory = { downloadHelper.pagedDownloads }
).flow.distinctUntilChanged()
pager { downloadHelper.pagedDownloads }.flow
.distinctUntilChanged()
.cachedIn(viewModelScope)
.onEach { _downloads.value = it }
.launchIn(viewModelScope)

View File

@@ -20,7 +20,7 @@ import com.aurora.gplayapi.helpers.SearchHelper
import com.aurora.gplayapi.helpers.contracts.SearchContract
import com.aurora.gplayapi.helpers.web.WebSearchHelper
import com.aurora.store.data.model.SearchFilter
import com.aurora.store.data.paging.GenericPagingSource.Companion.createPager
import com.aurora.store.data.paging.GenericPagingSource.Companion.manualPager
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
@@ -82,7 +82,7 @@ class SearchViewModel @Inject constructor(
}.distinctBy { app -> app.packageName }
}
createPager { page ->
manualPager { page ->
try {
when (page) {
1 -> contract.searchResults(query)