Simplify RecipesPagingAdapter creation

This commit is contained in:
Kirill Kamakin
2022-11-05 11:06:21 +01:00
parent 1ee0456494
commit 7800d7e754
2 changed files with 11 additions and 13 deletions

View File

@@ -21,7 +21,6 @@ import gq.kirmanak.mealient.extensions.refreshRequestFlow
import gq.kirmanak.mealient.extensions.showLongToast import gq.kirmanak.mealient.extensions.showLongToast
import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.ui.activity.MainActivityViewModel import gq.kirmanak.mealient.ui.activity.MainActivityViewModel
import gq.kirmanak.mealient.ui.recipes.images.RecipeImageLoader
import gq.kirmanak.mealient.ui.recipes.images.RecipePreloaderFactory import gq.kirmanak.mealient.ui.recipes.images.RecipePreloaderFactory
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import javax.inject.Inject import javax.inject.Inject
@@ -36,9 +35,6 @@ class RecipesFragment : Fragment(R.layout.fragment_recipes) {
@Inject @Inject
lateinit var logger: Logger lateinit var logger: Logger
@Inject
lateinit var recipeImageLoader: RecipeImageLoader
@Inject @Inject
lateinit var recipePagingAdapterFactory: RecipesPagingAdapter.Factory lateinit var recipePagingAdapterFactory: RecipesPagingAdapter.Factory
@@ -66,9 +62,7 @@ class RecipesFragment : Fragment(R.layout.fragment_recipes) {
private fun setupRecipeAdapter() { private fun setupRecipeAdapter() {
logger.v { "setupRecipeAdapter() called" } logger.v { "setupRecipeAdapter() called" }
val recipesAdapter = recipePagingAdapterFactory.build( val recipesAdapter = recipePagingAdapterFactory.build { navigateToRecipeInfo(it) }
recipeImageLoader = recipeImageLoader, clickListener = ::navigateToRecipeInfo
)
with(binding.recipes) { with(binding.recipes) {
adapter = recipesAdapter adapter = recipesAdapter

View File

@@ -4,12 +4,12 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.paging.PagingDataAdapter import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import dagger.hilt.android.scopes.FragmentScoped
import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity
import gq.kirmanak.mealient.databinding.ViewHolderRecipeBinding import gq.kirmanak.mealient.databinding.ViewHolderRecipeBinding
import gq.kirmanak.mealient.logging.Logger import gq.kirmanak.mealient.logging.Logger
import gq.kirmanak.mealient.ui.recipes.images.RecipeImageLoader import gq.kirmanak.mealient.ui.recipes.images.RecipeImageLoader
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton
class RecipesPagingAdapter private constructor( class RecipesPagingAdapter private constructor(
private val logger: Logger, private val logger: Logger,
@@ -18,19 +18,23 @@ class RecipesPagingAdapter private constructor(
private val clickListener: (RecipeSummaryEntity) -> Unit private val clickListener: (RecipeSummaryEntity) -> Unit
) : PagingDataAdapter<RecipeSummaryEntity, RecipeViewHolder>(RecipeDiffCallback) { ) : PagingDataAdapter<RecipeSummaryEntity, RecipeViewHolder>(RecipeDiffCallback) {
@Singleton @FragmentScoped
class Factory @Inject constructor( class Factory @Inject constructor(
private val logger: Logger, private val logger: Logger,
private val recipeViewHolderFactory: RecipeViewHolder.Factory, private val recipeViewHolderFactory: RecipeViewHolder.Factory,
private val recipeImageLoader: RecipeImageLoader,
) { ) {
fun build( fun build(clickListener: (RecipeSummaryEntity) -> Unit) = RecipesPagingAdapter(
recipeImageLoader: RecipeImageLoader, logger,
clickListener: (RecipeSummaryEntity) -> Unit, recipeImageLoader,
) = RecipesPagingAdapter(logger, recipeImageLoader, recipeViewHolderFactory, clickListener) recipeViewHolderFactory,
clickListener
)
} }
override fun onBindViewHolder(holder: RecipeViewHolder, position: Int) { override fun onBindViewHolder(holder: RecipeViewHolder, position: Int) {
logger.d { "onBindViewHolder() called with: holder = $holder, position = $position" }
val item = getItem(position) val item = getItem(position)
holder.bind(item) holder.bind(item)
} }