From 78d029b8e82668c54f73df44b96c463418efa3c1 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 22 Sep 2025 12:58:51 +0800 Subject: [PATCH] paging: Merge and rename methods Signed-off-by: Aayush Gupta --- .../store/data/paging/GenericPagingSource.kt | 22 ++++++++++++++++--- .../viewmodel/details/ReviewViewModel.kt | 4 ++-- .../viewmodel/downloads/DownloadsViewModel.kt | 12 +++------- .../store/viewmodel/search/SearchViewModel.kt | 4 ++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt b/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt index 5ac823d4a..4c46ff2b1 100644 --- a/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt +++ b/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt @@ -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( 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 pager( + pageSize: Int = DEFAULT_PAGE_SIZE, + enablePlaceholders: Boolean = true, + data: () -> PagingSource + ): Pager = 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 createPager( + fun manualPager( pageSize: Int = DEFAULT_PAGE_SIZE, enablePlaceholders: Boolean = true, data: suspend (Int) -> List diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt index 8eaf26372..fdf4885af 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt @@ -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 { diff --git a/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadsViewModel.kt index 733581d59..ca2b6a4ca 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadsViewModel.kt @@ -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) diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt index 251db1b17..84b3db4dd 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt @@ -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)