diff --git a/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt b/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt index b6034cb..4502b15 100644 --- a/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt +++ b/app/src/main/java/gq/kirmanak/mealient/extensions/FragmentExtensions.kt @@ -3,24 +3,19 @@ package gq.kirmanak.mealient.extensions import android.widget.Toast import androidx.annotation.StringRes import androidx.fragment.app.Fragment -import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.CoroutineScope +import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.FlowCollector -import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.launch -fun Fragment.collectWhenViewResumed( - flow: Flow, - collector: FlowCollector, -) = launchWhenViewResumed { flow.collect(collector) } - -fun Fragment.launchWhenViewResumed( - block: suspend CoroutineScope.() -> Unit, -) = viewLifecycleOwner.lifecycleScope.launchWhenResumed(block) - -fun Flow.launchIn(lifecycleOwner: LifecycleOwner) { - launchIn(lifecycleOwner.lifecycleScope) +fun Fragment.collectWhenViewResumed(flow: Flow, collector: FlowCollector) { + viewLifecycleOwner.lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { + flow.collect(collector) + } + } } fun Fragment.showLongToast(@StringRes text: Int) = showLongToast(getString(text)) diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesFragment.kt b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesFragment.kt index 6981ae8..64fb48f 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesFragment.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/recipes/RecipesFragment.kt @@ -17,7 +17,6 @@ import gq.kirmanak.mealient.database.recipe.entity.RecipeSummaryEntity import gq.kirmanak.mealient.databinding.FragmentRecipesBinding import gq.kirmanak.mealient.datasource.NetworkError import gq.kirmanak.mealient.extensions.collectWhenViewResumed -import gq.kirmanak.mealient.extensions.launchIn import gq.kirmanak.mealient.extensions.refreshRequestFlow import gq.kirmanak.mealient.extensions.showLongToast import gq.kirmanak.mealient.logging.Logger @@ -104,8 +103,8 @@ class RecipesFragment : Fragment(R.layout.fragment_recipes) { } private fun PagingDataAdapter.observeLoadStateChanges() { - appendPaginationEnd().onEach { onPaginationEnd() }.launchIn(viewLifecycleOwner) - refreshErrors().onEach { onLoadFailure(it) }.launchIn(viewLifecycleOwner) + collectWhenViewResumed(appendPaginationEnd()) { onPaginationEnd() } + collectWhenViewResumed(refreshErrors()) { onLoadFailure(it) } } private fun onPaginationEnd() {