Maybe help with double page jankyness

This commit is contained in:
Jobobby04 2021-10-23 22:19:18 -04:00
parent ef9a4ee643
commit 4d7d451fde
3 changed files with 45 additions and 9 deletions

View File

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

View File

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

View File

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