Fix issues related to Manga screen slow load (#7708)

* Fix back handling when manga is still loading

* MangaPresenter: Show what we have earlier to reduce percepted slowness

(cherry picked from commit b4e15263db3d00326abe5886fffb3608c9a85c47)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
This commit is contained in:
Ivan Iskandar 2022-08-09 20:10:48 +07:00 committed by Jobobby04
parent 8aedad02f6
commit 2ca853a302
2 changed files with 50 additions and 41 deletions

View File

@ -206,8 +206,13 @@ class MangaController :
// Let compose view handle this
override fun handleBack(): Boolean {
(activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher?.onBackPressed()
return true
val dispatcher = (activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher ?: return false
return if (dispatcher.hasEnabledCallbacks()) {
dispatcher.onBackPressed()
true
} else {
false
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedViewState: Bundle?): View {

View File

@ -252,10 +252,41 @@ class MangaPresenter(
// Manga info - start
presenterScope.launchIO {
if (!getMangaAndChapters.awaitManga(mangaId).favorite) {
val manga = getMangaAndChapters.awaitManga(mangaId)
if (!manga.favorite) {
ChapterSettingsHelper.applySettingDefaults(mangaId)
}
// Show what we have earlier.
// Defaults set by the block above won't apply until next update but it doesn't matter
// since we don't have any chapter yet.
_state.update {
val source = Injekt.get<SourceManager>().getOrStub(manga.source)
MangaScreenState.Success(
manga = manga,
source = source,
isFromSource = isFromSource,
trackingAvailable = trackManager.hasLoggedServices(),
chapters = emptyList(),
isRefreshingChapter = true,
isIncognitoMode = incognitoMode,
isDownloadedOnlyMode = downloadedOnlyMode,
// SY -->
showRecommendationsInOverflow = preferences.recommendsInOverflow().get(),
showMergeWithAnother = smartSearched,
mergedData = null,
meta = null,
pagePreviewsState = if (source.getMainSource() is PagePreviewSource) {
getPagePreviews(manga, source)
PagePreviewState.Loading
} else {
PagePreviewState.Unused
},
// SY <--
)
}
getMangaAndChapters.subscribe(mangaId)
.distinctUntilChanged()
// SY -->
@ -333,44 +364,17 @@ class MangaPresenter(
alwaysShowReadingProgress = preferences.preserveReadingPosition().get() && manga.isEhBasedManga(),
// SY <--
)
_state.update { currentState ->
when (currentState) {
// Initialize success state
MangaScreenState.Loading -> {
val source = Injekt.get<SourceManager>().getOrStub(manga.source)
MangaScreenState.Success(
manga = manga,
source = source,
isFromSource = isFromSource,
trackingAvailable = trackManager.hasLoggedServices(),
chapters = chapterItems,
isIncognitoMode = incognitoMode,
isDownloadedOnlyMode = downloadedOnlyMode,
// SY -->
meta = raiseMetadata(flatMetadata, source),
mergedData = mergedData,
showRecommendationsInOverflow = preferences.recommendsInOverflow().get(),
showMergeWithAnother = smartSearched,
pagePreviewsState = if (source.getMainSource() is PagePreviewSource) {
getPagePreviews(manga, source)
PagePreviewState.Loading
} else {
PagePreviewState.Unused
},
// SY <--
)
}
// Update state
is MangaScreenState.Success -> currentState.copy(
manga = manga,
chapters = chapterItems,
// SY -->
meta = raiseMetadata(flatMetadata, currentState.source),
mergedData = mergedData,
// SY <--
)
}
updateSuccessState {
it.copy(
manga = manga,
chapters = chapterItems,
isRefreshingChapter = false,
isRefreshingInfo = false,
// SY -->
meta = raiseMetadata(flatMetadata, it.source),
mergedData = mergedData,
// SY <--
)
}
observeTrackers()