From 280f282972064b18ac8bf0329212d3a365dfbea2 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 13 Nov 2022 15:29:44 +0100 Subject: [PATCH] Disable swipe refresh when data is refreshing --- .../ui/recipes/RecipesListFragment.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesListFragment.kt b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesListFragment.kt index a9d044c..64c67a7 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesListFragment.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesListFragment.kt @@ -110,6 +110,11 @@ class RecipesListFragment : Fragment(R.layout.fragment_recipes_list) { showLongToast(R.string.fragment_recipes_last_page_loaded_toast) } + collectWhenViewResumed(recipesAdapter.sourceIsRefreshing()) { disableSwipeRefresh -> + logger.v { "setupRecipeAdapter: changing refresher enabled state to ${!disableSwipeRefresh}" } + binding.refresher.isEnabled = !disableSwipeRefresh + } + collectWhenViewResumed(recipesAdapter.refreshErrors()) { onLoadFailure(it) } @@ -157,11 +162,21 @@ private fun Throwable.toLoadErrorReasonText(): Int? = when (this) { } private fun PagingDataAdapter.refreshErrors(): Flow { - return loadStateFlow.map { it.refresh }.valueUpdatesOnly().filterIsInstance() + return loadStateFlow + .map { it.refresh } + .valueUpdatesOnly() + .filterIsInstance() .map { it.error } } private fun PagingDataAdapter.appendPaginationEnd(): Flow { - return loadStateFlow.map { it.append.endOfPaginationReached }.valueUpdatesOnly().filter { it } + return loadStateFlow + .map { it.append.endOfPaginationReached } + .valueUpdatesOnly() + .filter { it } .map { } } + +private fun PagingDataAdapter.sourceIsRefreshing(): Flow { + return loadStateFlow.map { it.source.refresh !is LoadState.NotLoading }.valueUpdatesOnly() +}