Fix crashing when tapping too fast
This commit is contained in:
@@ -17,7 +17,10 @@ import gq.kirmanak.mealient.R
|
|||||||
import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity
|
import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity
|
||||||
import gq.kirmanak.mealient.databinding.FragmentRecipesBinding
|
import gq.kirmanak.mealient.databinding.FragmentRecipesBinding
|
||||||
import gq.kirmanak.mealient.datasource.NetworkError
|
import gq.kirmanak.mealient.datasource.NetworkError
|
||||||
import gq.kirmanak.mealient.extensions.*
|
import gq.kirmanak.mealient.extensions.collectWhenViewResumed
|
||||||
|
import gq.kirmanak.mealient.extensions.refreshRequestFlow
|
||||||
|
import gq.kirmanak.mealient.extensions.showLongToast
|
||||||
|
import gq.kirmanak.mealient.extensions.valueUpdatesOnly
|
||||||
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.RecipePreloaderFactory
|
import gq.kirmanak.mealient.ui.recipes.images.RecipePreloaderFactory
|
||||||
@@ -43,8 +46,6 @@ class RecipesFragment : Fragment(R.layout.fragment_recipes) {
|
|||||||
@Inject
|
@Inject
|
||||||
lateinit var recipePreloaderFactory: RecipePreloaderFactory
|
lateinit var recipePreloaderFactory: RecipePreloaderFactory
|
||||||
|
|
||||||
private var ignoreRecipeClicks = false
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" }
|
logger.v { "onViewCreated() called with: view = $view, savedInstanceState = $savedInstanceState" }
|
||||||
@@ -62,15 +63,21 @@ class RecipesFragment : Fragment(R.layout.fragment_recipes) {
|
|||||||
|
|
||||||
private fun onRecipeClicked(recipe: RecipeSummaryEntity) {
|
private fun onRecipeClicked(recipe: RecipeSummaryEntity) {
|
||||||
logger.v { "onRecipeClicked() called with: recipe = $recipe" }
|
logger.v { "onRecipeClicked() called with: recipe = $recipe" }
|
||||||
if (ignoreRecipeClicks) return
|
|
||||||
binding.progress.isVisible = true
|
binding.progress.isVisible = true
|
||||||
ignoreRecipeClicks = true // TODO doesn't really work
|
viewModel.refreshRecipeInfo(recipe.slug).observe(viewLifecycleOwner) { result ->
|
||||||
viewModel.refreshRecipeInfo(recipe.slug).observeOnce(viewLifecycleOwner) { result ->
|
|
||||||
binding.progress.isVisible = false
|
binding.progress.isVisible = false
|
||||||
if (result.isSuccess) navigateToRecipeInfo(recipe.remoteId)
|
if (result.isSuccess && !isNavigatingSomewhere()) {
|
||||||
ignoreRecipeClicks = false
|
navigateToRecipeInfo(recipe.remoteId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isNavigatingSomewhere(): Boolean {
|
||||||
|
logger.v { "isNavigatingSomewhere() called" }
|
||||||
|
val label = findNavController().currentDestination?.label
|
||||||
|
logger.d { "isNavigatingSomewhere: current destination is $label" }
|
||||||
|
return label != "fragment_recipes"
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupRecipeAdapter() {
|
private fun setupRecipeAdapter() {
|
||||||
logger.v { "setupRecipeAdapter() called" }
|
logger.v { "setupRecipeAdapter() called" }
|
||||||
|
|||||||
Reference in New Issue
Block a user