From a952a5252ebf96776aee1e8bf594272fab449981 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 13 Nov 2022 10:54:03 +0100 Subject: [PATCH] Hide InvalidatingPagingSourceFactory behind interface --- .../data/recipes/impl/RecipePagingSourceFactory.kt | 1 + .../recipes/impl/RecipePagingSourceFactoryImpl.kt | 12 ++++++++---- .../mealient/data/recipes/impl/RecipeRepoImpl.kt | 5 +---- .../data/recipes/impl/RecipesRemoteMediator.kt | 2 +- .../java/gq/kirmanak/mealient/di/RecipeModule.kt | 7 ------- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactory.kt b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactory.kt index f3c8fc0..62ff23e 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactory.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactory.kt @@ -5,4 +5,5 @@ import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity interface RecipePagingSourceFactory : () -> PagingSource { fun setQuery(newQuery: String?) + fun invalidate() } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactoryImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactoryImpl.kt index 2de9e54..35c5500 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactoryImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipePagingSourceFactoryImpl.kt @@ -1,8 +1,7 @@ package gq.kirmanak.mealient.data.recipes.impl -import androidx.paging.PagingSource +import androidx.paging.InvalidatingPagingSourceFactory import gq.kirmanak.mealient.data.recipes.db.RecipeStorage -import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity import gq.kirmanak.mealient.logging.Logger import java.util.concurrent.atomic.AtomicReference import javax.inject.Inject @@ -16,14 +15,19 @@ class RecipePagingSourceFactoryImpl @Inject constructor( private val query = AtomicReference(null) - override fun invoke(): PagingSource { + private val delegate = InvalidatingPagingSourceFactory { val currentQuery = query.get() logger.d { "Creating paging source, query is $currentQuery" } - return recipeStorage.queryRecipes(currentQuery) + recipeStorage.queryRecipes(currentQuery) } + override fun invoke() = delegate.invoke() + override fun setQuery(newQuery: String?) { logger.v { "setQuery() called with: newQuery = $newQuery" } query.set(newQuery) + invalidate() } + + override fun invalidate() = delegate.invalidate() } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoImpl.kt index dc2ac7c..97ab134 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipeRepoImpl.kt @@ -1,7 +1,6 @@ package gq.kirmanak.mealient.data.recipes.impl import androidx.paging.ExperimentalPagingApi -import androidx.paging.InvalidatingPagingSourceFactory import androidx.paging.Pager import androidx.paging.PagingConfig import gq.kirmanak.mealient.data.recipes.RecipeRepo @@ -20,7 +19,6 @@ class RecipeRepoImpl @Inject constructor( private val mediator: RecipesRemoteMediator, private val storage: RecipeStorage, private val pagingSourceFactory: RecipePagingSourceFactory, - private val invalidatingPagingSourceFactory: InvalidatingPagingSourceFactory, private val dataSource: RecipeDataSource, private val logger: Logger, ) : RecipeRepo { @@ -31,7 +29,7 @@ class RecipeRepoImpl @Inject constructor( return Pager( config = pagingConfig, remoteMediator = mediator, - pagingSourceFactory = invalidatingPagingSourceFactory, + pagingSourceFactory = pagingSourceFactory, ) } @@ -59,6 +57,5 @@ class RecipeRepoImpl @Inject constructor( override fun updateNameQuery(name: String?) { logger.v { "updateNameQuery() called with: name = $name" } pagingSourceFactory.setQuery(name) - invalidatingPagingSourceFactory.invalidate() } } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediator.kt b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediator.kt index 435d76d..54915d5 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediator.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/recipes/impl/RecipesRemoteMediator.kt @@ -17,7 +17,7 @@ import javax.inject.Singleton class RecipesRemoteMediator @Inject constructor( private val storage: RecipeStorage, private val network: RecipeDataSource, - private val pagingSourceFactory: InvalidatingPagingSourceFactory, + private val pagingSourceFactory: RecipePagingSourceFactory, private val logger: Logger, ) : RemoteMediator() { diff --git a/app/src/main/java/gq/kirmanak/mealient/di/RecipeModule.kt b/app/src/main/java/gq/kirmanak/mealient/di/RecipeModule.kt index 418e310..210b3de 100644 --- a/app/src/main/java/gq/kirmanak/mealient/di/RecipeModule.kt +++ b/app/src/main/java/gq/kirmanak/mealient/di/RecipeModule.kt @@ -1,6 +1,5 @@ package gq.kirmanak.mealient.di -import androidx.paging.InvalidatingPagingSourceFactory import com.bumptech.glide.load.model.ModelLoaderFactory import com.bumptech.glide.request.RequestOptions import dagger.Binds @@ -50,12 +49,6 @@ interface RecipeModule { companion object { - @Provides - @Singleton - fun provideRecipePagingSourceFactory( - factory: RecipePagingSourceFactory, - ) = InvalidatingPagingSourceFactory(factory) - @Provides @Singleton fun provideGlideRequestOptions(): RequestOptions = RequestOptions.centerCropTransform()