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 * 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. * with the class directly.
* @param block Data to load into the pager * @param block Data to load into the pager
*/ */
@@ -27,12 +27,28 @@ class GenericPagingSource<T : Any>(
private const val DEFAULT_PAGE_SIZE = 20 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 pageSize Size of the page
* @param enablePlaceholders Whether placeholders should be shown * @param enablePlaceholders Whether placeholders should be shown
* @param data Data to load into the pager * @param data Data to load into the pager
*/ */
fun <T : Any> createPager( fun <T : Any> manualPager(
pageSize: Int = DEFAULT_PAGE_SIZE, pageSize: Int = DEFAULT_PAGE_SIZE,
enablePlaceholders: Boolean = true, enablePlaceholders: Boolean = true,
data: suspend (Int) -> List<T> data: suspend (Int) -> List<T>

View File

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

View File

@@ -10,12 +10,11 @@ import android.net.Uri
import android.util.Log import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.cachedIn import androidx.paging.cachedIn
import com.aurora.store.data.helper.DownloadHelper import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.data.installer.AppInstaller 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.room.download.Download
import com.aurora.store.data.work.ExportWorker import com.aurora.store.data.work.ExportWorker
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@@ -88,13 +87,8 @@ class DownloadsViewModel @Inject constructor(
} }
private fun getPagedDownloads() { private fun getPagedDownloads() {
Pager( pager { downloadHelper.pagedDownloads }.flow
config = PagingConfig( .distinctUntilChanged()
pageSize = 20,
enablePlaceholders = true
),
pagingSourceFactory = { downloadHelper.pagedDownloads }
).flow.distinctUntilChanged()
.cachedIn(viewModelScope) .cachedIn(viewModelScope)
.onEach { _downloads.value = it } .onEach { _downloads.value = it }
.launchIn(viewModelScope) .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.contracts.SearchContract
import com.aurora.gplayapi.helpers.web.WebSearchHelper import com.aurora.gplayapi.helpers.web.WebSearchHelper
import com.aurora.store.data.model.SearchFilter 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 com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -82,7 +82,7 @@ class SearchViewModel @Inject constructor(
}.distinctBy { app -> app.packageName } }.distinctBy { app -> app.packageName }
} }
createPager { page -> manualPager { page ->
try { try {
when (page) { when (page) {
1 -> contract.searchResults(query) 1 -> contract.searchResults(query)