Alternate method of avoiding LazyColumn key conflict crashes

Co-authored-by: ivaniskandar <ivaniskandar@users.noreply.github.com>
(cherry picked from commit c50b1a5c66256ab003a224d50caa317c53479397)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesPresenter.kt
This commit is contained in:
arkon 2022-10-27 23:26:34 -04:00 committed by Jobobby04
parent 099fa77149
commit 2217eb9d35
4 changed files with 9 additions and 7 deletions

View File

@ -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)

View File

@ -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

View File

@ -20,12 +20,14 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.stateIn
import logcat.LogPriority
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@ -58,7 +60,7 @@ class SourcesPresenter(
fun onCreate() {
// SY -->
combine(
getEnabledSources.subscribe().debounce(500), // Avoid crashes due to LazyColumn rendering
getEnabledSources.subscribe(), // Avoid crashes due to LazyColumn rendering
getSourceCategories.subscribe(),
getShowLatest.subscribe(controllerMode),
flowOf(controllerMode == SourcesController.Mode.CATALOGUE),
@ -69,6 +71,7 @@ class SourcesPresenter(
_events.send(Event.FailedFetchingSources)
}
.flowOn(Dispatchers.IO)
.stateIn(presenterScope)
.launchIn(presenterScope)
// SY <--
}

View File

@ -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