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:
parent
8aedad02f6
commit
2ca853a302
@ -206,8 +206,13 @@ class MangaController :
|
|||||||
|
|
||||||
// Let compose view handle this
|
// Let compose view handle this
|
||||||
override fun handleBack(): Boolean {
|
override fun handleBack(): Boolean {
|
||||||
(activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher?.onBackPressed()
|
val dispatcher = (activity as? OnBackPressedDispatcherOwner)?.onBackPressedDispatcher ?: return false
|
||||||
return true
|
return if (dispatcher.hasEnabledCallbacks()) {
|
||||||
|
dispatcher.onBackPressed()
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedViewState: Bundle?): View {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedViewState: Bundle?): View {
|
||||||
|
@ -252,10 +252,41 @@ class MangaPresenter(
|
|||||||
// Manga info - start
|
// Manga info - start
|
||||||
|
|
||||||
presenterScope.launchIO {
|
presenterScope.launchIO {
|
||||||
if (!getMangaAndChapters.awaitManga(mangaId).favorite) {
|
val manga = getMangaAndChapters.awaitManga(mangaId)
|
||||||
|
|
||||||
|
if (!manga.favorite) {
|
||||||
ChapterSettingsHelper.applySettingDefaults(mangaId)
|
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)
|
getMangaAndChapters.subscribe(mangaId)
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -333,45 +364,18 @@ class MangaPresenter(
|
|||||||
alwaysShowReadingProgress = preferences.preserveReadingPosition().get() && manga.isEhBasedManga(),
|
alwaysShowReadingProgress = preferences.preserveReadingPosition().get() && manga.isEhBasedManga(),
|
||||||
// SY <--
|
// SY <--
|
||||||
)
|
)
|
||||||
_state.update { currentState ->
|
updateSuccessState {
|
||||||
when (currentState) {
|
it.copy(
|
||||||
// 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,
|
manga = manga,
|
||||||
chapters = chapterItems,
|
chapters = chapterItems,
|
||||||
|
isRefreshingChapter = false,
|
||||||
|
isRefreshingInfo = false,
|
||||||
// SY -->
|
// SY -->
|
||||||
meta = raiseMetadata(flatMetadata, currentState.source),
|
meta = raiseMetadata(flatMetadata, it.source),
|
||||||
mergedData = mergedData,
|
mergedData = mergedData,
|
||||||
// SY <--
|
// SY <--
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
observeTrackers()
|
observeTrackers()
|
||||||
observeTrackingCount()
|
observeTrackingCount()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user