From 4d7d451fdefe78fcd2c85a5fc750c1f483c64b20 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sat, 23 Oct 2021 22:19:18 -0400 Subject: [PATCH] Maybe help with double page jankyness --- .../ui/reader/viewer/pager/PagerPageHolder.kt | 24 +++++++++++++------ .../ui/reader/viewer/pager/PagerViewer.kt | 8 +++++-- .../reader/viewer/pager/PagerViewerAdapter.kt | 22 +++++++++++++++++ 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt index fc6dc1f67..282e0c000 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt @@ -26,6 +26,7 @@ import eu.kanade.tachiyomi.widget.ViewPagerAdapter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.delay import logcat.LogPriority import rx.Observable import rx.Subscription @@ -103,7 +104,6 @@ class PagerPageHolder( var extraStatus: Int = 0 var progress: Int = 0 var extraProgress: Int = 0 - private var skipExtra = false var scope: CoroutineScope? = null // SY <-- @@ -374,12 +374,12 @@ class PagerPageHolder( if (page.fullPage) return imageStream if (ImageUtil.isAnimatedAndSupported(imageStream)) { page.fullPage = true - skipExtra = true + splitDoublePages() return imageStream } else if (ImageUtil.isAnimatedAndSupported(imageStream2)) { page.isolatedPage = true extraPage?.fullPage = true - skipExtra = true + splitDoublePages() return imageStream } val imageBytes = imageStream.readBytes() @@ -389,7 +389,7 @@ class PagerPageHolder( imageStream2.close() imageStream.close() page.fullPage = true - skipExtra = true + splitDoublePages() logcat(LogPriority.ERROR, e) { "Cannot combine pages" } return imageBytes.inputStream() } @@ -401,7 +401,7 @@ class PagerPageHolder( imageStream2.close() imageStream.close() page.fullPage = true - skipExtra = true + splitDoublePages() return imageBytes.inputStream() } @@ -412,8 +412,8 @@ class PagerPageHolder( imageStream2.close() imageStream.close() extraPage?.fullPage = true - skipExtra = true page.isolatedPage = true + splitDoublePages() logcat(LogPriority.ERROR, e) { "Cannot combine pages" } return imageBytes.inputStream() } @@ -426,7 +426,7 @@ class PagerPageHolder( imageStream.close() extraPage?.fullPage = true page.isolatedPage = true - skipExtra = true + splitDoublePages() return imageBytes.inputStream() } val isLTR = (viewer !is R2LPagerViewer).xor(viewer.config.invertDoublePages) @@ -444,6 +444,16 @@ class PagerPageHolder( } } + private fun splitDoublePages() { + scope?.launchUI { + delay(100) + viewer.splitDoublePages(page) + if (extraPage?.fullPage == true || page.fullPage) { + extraPage = null + } + } + } + private fun splitInHalf(imageStream: InputStream): InputStream { var side = when { viewer is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.RIGHT diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt index f590f211c..1401ce9c6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt @@ -28,7 +28,7 @@ import kotlin.math.min @Suppress("LeakingThis") abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { - private val scope = MainScope() + val scope = MainScope() /** * View pager used by this viewer. It's abstract to implement L2R, R2L and vertical pagers on @@ -167,7 +167,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { /** * Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active */ - private fun onPageChange(position: Int) { + fun onPageChange(position: Int) { val page = adapter.joinedItems.getOrNull(position) if (page != null && currentPage != page) { val allowPreload = checkAllowPreload(page.first as? ReaderPage) @@ -439,6 +439,10 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { adapter.pageToShift = page ?: adapter.joinedItems.getOrNull(pager.currentItem)?.first as? ReaderPage } + fun splitDoublePages(currentPage: ReaderPage) { + adapter.splitDoublePages(currentPage) + } + fun getShiftedPage(): ReaderPage? = adapter.pageToShift // SY <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt index 6a8da8b5b..24bedea80 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt @@ -8,9 +8,11 @@ import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.viewer.hasMissingChapters +import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.system.createReaderThemeContext import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.widget.ViewPagerAdapter +import kotlinx.coroutines.delay import kotlin.math.max /** @@ -358,5 +360,25 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { } viewer.pager.setCurrentItem(index, false) } + + fun splitDoublePages(current: ReaderPage) { + val oldCurrent = joinedItems.getOrNull(viewer.pager.currentItem) + setJoinedItems( + oldCurrent?.second == current || + (current.index + 1) < ( + ( + oldCurrent?.second + ?: oldCurrent?.first + ) as? ReaderPage + )?.index ?: 0 + ) + + // The listener may be removed when we split a page, so the ui may not have updated properly + // This case usually happens when we load a new chapter and the first 2 pages need to split og + viewer.scope.launchUI { + delay(100) + viewer.onPageChange(viewer.pager.currentItem) + } + } // SY <-- }