Hide InvalidatingPagingSourceFactory behind interface
This commit is contained in:
@@ -5,4 +5,5 @@ import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity
|
|||||||
|
|
||||||
interface RecipePagingSourceFactory : () -> PagingSource<Int, RecipeSummaryEntity> {
|
interface RecipePagingSourceFactory : () -> PagingSource<Int, RecipeSummaryEntity> {
|
||||||
fun setQuery(newQuery: String?)
|
fun setQuery(newQuery: String?)
|
||||||
|
fun invalidate()
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
package gq.kirmanak.mealient.data.recipes.impl
|
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.data.recipes.db.RecipeStorage
|
||||||
import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity
|
|
||||||
import gq.kirmanak.mealient.logging.Logger
|
import gq.kirmanak.mealient.logging.Logger
|
||||||
import java.util.concurrent.atomic.AtomicReference
|
import java.util.concurrent.atomic.AtomicReference
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -16,14 +15,19 @@ class RecipePagingSourceFactoryImpl @Inject constructor(
|
|||||||
|
|
||||||
private val query = AtomicReference<String>(null)
|
private val query = AtomicReference<String>(null)
|
||||||
|
|
||||||
override fun invoke(): PagingSource<Int, RecipeSummaryEntity> {
|
private val delegate = InvalidatingPagingSourceFactory {
|
||||||
val currentQuery = query.get()
|
val currentQuery = query.get()
|
||||||
logger.d { "Creating paging source, query is $currentQuery" }
|
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?) {
|
override fun setQuery(newQuery: String?) {
|
||||||
logger.v { "setQuery() called with: newQuery = $newQuery" }
|
logger.v { "setQuery() called with: newQuery = $newQuery" }
|
||||||
query.set(newQuery)
|
query.set(newQuery)
|
||||||
|
invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun invalidate() = delegate.invalidate()
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package gq.kirmanak.mealient.data.recipes.impl
|
package gq.kirmanak.mealient.data.recipes.impl
|
||||||
|
|
||||||
import androidx.paging.ExperimentalPagingApi
|
import androidx.paging.ExperimentalPagingApi
|
||||||
import androidx.paging.InvalidatingPagingSourceFactory
|
|
||||||
import androidx.paging.Pager
|
import androidx.paging.Pager
|
||||||
import androidx.paging.PagingConfig
|
import androidx.paging.PagingConfig
|
||||||
import gq.kirmanak.mealient.data.recipes.RecipeRepo
|
import gq.kirmanak.mealient.data.recipes.RecipeRepo
|
||||||
@@ -20,7 +19,6 @@ class RecipeRepoImpl @Inject constructor(
|
|||||||
private val mediator: RecipesRemoteMediator,
|
private val mediator: RecipesRemoteMediator,
|
||||||
private val storage: RecipeStorage,
|
private val storage: RecipeStorage,
|
||||||
private val pagingSourceFactory: RecipePagingSourceFactory,
|
private val pagingSourceFactory: RecipePagingSourceFactory,
|
||||||
private val invalidatingPagingSourceFactory: InvalidatingPagingSourceFactory<Int, RecipeSummaryEntity>,
|
|
||||||
private val dataSource: RecipeDataSource,
|
private val dataSource: RecipeDataSource,
|
||||||
private val logger: Logger,
|
private val logger: Logger,
|
||||||
) : RecipeRepo {
|
) : RecipeRepo {
|
||||||
@@ -31,7 +29,7 @@ class RecipeRepoImpl @Inject constructor(
|
|||||||
return Pager(
|
return Pager(
|
||||||
config = pagingConfig,
|
config = pagingConfig,
|
||||||
remoteMediator = mediator,
|
remoteMediator = mediator,
|
||||||
pagingSourceFactory = invalidatingPagingSourceFactory,
|
pagingSourceFactory = pagingSourceFactory,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +57,5 @@ class RecipeRepoImpl @Inject constructor(
|
|||||||
override fun updateNameQuery(name: String?) {
|
override fun updateNameQuery(name: String?) {
|
||||||
logger.v { "updateNameQuery() called with: name = $name" }
|
logger.v { "updateNameQuery() called with: name = $name" }
|
||||||
pagingSourceFactory.setQuery(name)
|
pagingSourceFactory.setQuery(name)
|
||||||
invalidatingPagingSourceFactory.invalidate()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ import javax.inject.Singleton
|
|||||||
class RecipesRemoteMediator @Inject constructor(
|
class RecipesRemoteMediator @Inject constructor(
|
||||||
private val storage: RecipeStorage,
|
private val storage: RecipeStorage,
|
||||||
private val network: RecipeDataSource,
|
private val network: RecipeDataSource,
|
||||||
private val pagingSourceFactory: InvalidatingPagingSourceFactory<Int, RecipeSummaryEntity>,
|
private val pagingSourceFactory: RecipePagingSourceFactory,
|
||||||
private val logger: Logger,
|
private val logger: Logger,
|
||||||
) : RemoteMediator<Int, RecipeSummaryEntity>() {
|
) : RemoteMediator<Int, RecipeSummaryEntity>() {
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package gq.kirmanak.mealient.di
|
package gq.kirmanak.mealient.di
|
||||||
|
|
||||||
import androidx.paging.InvalidatingPagingSourceFactory
|
|
||||||
import com.bumptech.glide.load.model.ModelLoaderFactory
|
import com.bumptech.glide.load.model.ModelLoaderFactory
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
@@ -50,12 +49,6 @@ interface RecipeModule {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Singleton
|
|
||||||
fun provideRecipePagingSourceFactory(
|
|
||||||
factory: RecipePagingSourceFactory,
|
|
||||||
) = InvalidatingPagingSourceFactory(factory)
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideGlideRequestOptions(): RequestOptions = RequestOptions.centerCropTransform()
|
fun provideGlideRequestOptions(): RequestOptions = RequestOptions.centerCropTransform()
|
||||||
|
|||||||
Reference in New Issue
Block a user