From c50b1a5c66256ab003a224d50caa317c53479397 Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 27 Oct 2022 23:26:34 -0400 Subject: [PATCH] Alternate method of avoiding LazyColumn key conflict crashes Co-authored-by: ivaniskandar --- .../main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt | 3 +-- .../tachiyomi/ui/browse/extension/ExtensionsPresenter.kt | 4 ++-- .../eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt | 4 ++-- .../eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt index 8e56b9f80..277881d75 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt @@ -118,10 +118,9 @@ fun LazyListScope.updatesUiItems( } is UpdatesUiModel.Item -> { val updatesItem = item.item - val update = updatesItem.update UpdatesUiItem( modifier = Modifier.animateItemPlacement(), - update = update, + update = updatesItem.update, selected = updatesItem.selected, onLongClick = { onUpdateSelected(updatesItem, !updatesItem.selected, true, true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsPresenter.kt index c21e140d1..a603be96c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsPresenter.kt @@ -20,9 +20,9 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import rx.Observable import uy.kohesive.injekt.Injekt @@ -116,7 +116,7 @@ class ExtensionsPresenter( items } - .debounce(500) // Avoid crashes due to LazyColumn rendering + .stateIn(presenterScope) .collectLatest { state.isLoading = false state.items = it diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt index 506d7ee24..02f6c0cea 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt @@ -16,8 +16,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.stateIn import logcat.LogPriority import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -39,11 +39,11 @@ class SourcesPresenter( fun onCreate() { presenterScope.launchIO { getEnabledSources.subscribe() - .debounce(500) // Avoid crashes due to LazyColumn rendering .catch { exception -> logcat(LogPriority.ERROR, exception) _events.send(Event.FailedFetchingSources) } + .stateIn(presenterScope) .collectLatest(::collectLatestSources) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt index 953afc2e4..527cf61a1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesPresenter.kt @@ -33,9 +33,9 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import logcat.LogPriority import uy.kohesive.injekt.Injekt @@ -87,11 +87,11 @@ class UpdatesPresenter( getUpdates.subscribe(calendar).distinctUntilChanged(), downloadCache.changes, ) { updates, _ -> updates } - .debounce(500) // Avoid crashes due to LazyColumn rendering .catch { logcat(LogPriority.ERROR, it) _events.send(Event.InternalError) } + .stateIn(presenterScope) .collectLatest { updates -> state.items = updates.toUpdateItems() state.isLoading = false