Maybe help with double page jankyness
This commit is contained in:
parent
ef9a4ee643
commit
4d7d451fde
@ -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
|
||||
|
@ -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 <--
|
||||
}
|
||||
|
@ -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 <--
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user