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.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.Subscription
|
import rx.Subscription
|
||||||
@ -103,7 +104,6 @@ class PagerPageHolder(
|
|||||||
var extraStatus: Int = 0
|
var extraStatus: Int = 0
|
||||||
var progress: Int = 0
|
var progress: Int = 0
|
||||||
var extraProgress: Int = 0
|
var extraProgress: Int = 0
|
||||||
private var skipExtra = false
|
|
||||||
var scope: CoroutineScope? = null
|
var scope: CoroutineScope? = null
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
@ -374,12 +374,12 @@ class PagerPageHolder(
|
|||||||
if (page.fullPage) return imageStream
|
if (page.fullPage) return imageStream
|
||||||
if (ImageUtil.isAnimatedAndSupported(imageStream)) {
|
if (ImageUtil.isAnimatedAndSupported(imageStream)) {
|
||||||
page.fullPage = true
|
page.fullPage = true
|
||||||
skipExtra = true
|
splitDoublePages()
|
||||||
return imageStream
|
return imageStream
|
||||||
} else if (ImageUtil.isAnimatedAndSupported(imageStream2)) {
|
} else if (ImageUtil.isAnimatedAndSupported(imageStream2)) {
|
||||||
page.isolatedPage = true
|
page.isolatedPage = true
|
||||||
extraPage?.fullPage = true
|
extraPage?.fullPage = true
|
||||||
skipExtra = true
|
splitDoublePages()
|
||||||
return imageStream
|
return imageStream
|
||||||
}
|
}
|
||||||
val imageBytes = imageStream.readBytes()
|
val imageBytes = imageStream.readBytes()
|
||||||
@ -389,7 +389,7 @@ class PagerPageHolder(
|
|||||||
imageStream2.close()
|
imageStream2.close()
|
||||||
imageStream.close()
|
imageStream.close()
|
||||||
page.fullPage = true
|
page.fullPage = true
|
||||||
skipExtra = true
|
splitDoublePages()
|
||||||
logcat(LogPriority.ERROR, e) { "Cannot combine pages" }
|
logcat(LogPriority.ERROR, e) { "Cannot combine pages" }
|
||||||
return imageBytes.inputStream()
|
return imageBytes.inputStream()
|
||||||
}
|
}
|
||||||
@ -401,7 +401,7 @@ class PagerPageHolder(
|
|||||||
imageStream2.close()
|
imageStream2.close()
|
||||||
imageStream.close()
|
imageStream.close()
|
||||||
page.fullPage = true
|
page.fullPage = true
|
||||||
skipExtra = true
|
splitDoublePages()
|
||||||
return imageBytes.inputStream()
|
return imageBytes.inputStream()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,8 +412,8 @@ class PagerPageHolder(
|
|||||||
imageStream2.close()
|
imageStream2.close()
|
||||||
imageStream.close()
|
imageStream.close()
|
||||||
extraPage?.fullPage = true
|
extraPage?.fullPage = true
|
||||||
skipExtra = true
|
|
||||||
page.isolatedPage = true
|
page.isolatedPage = true
|
||||||
|
splitDoublePages()
|
||||||
logcat(LogPriority.ERROR, e) { "Cannot combine pages" }
|
logcat(LogPriority.ERROR, e) { "Cannot combine pages" }
|
||||||
return imageBytes.inputStream()
|
return imageBytes.inputStream()
|
||||||
}
|
}
|
||||||
@ -426,7 +426,7 @@ class PagerPageHolder(
|
|||||||
imageStream.close()
|
imageStream.close()
|
||||||
extraPage?.fullPage = true
|
extraPage?.fullPage = true
|
||||||
page.isolatedPage = true
|
page.isolatedPage = true
|
||||||
skipExtra = true
|
splitDoublePages()
|
||||||
return imageBytes.inputStream()
|
return imageBytes.inputStream()
|
||||||
}
|
}
|
||||||
val isLTR = (viewer !is R2LPagerViewer).xor(viewer.config.invertDoublePages)
|
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 {
|
private fun splitInHalf(imageStream: InputStream): InputStream {
|
||||||
var side = when {
|
var side = when {
|
||||||
viewer is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.RIGHT
|
viewer is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.RIGHT
|
||||||
|
@ -28,7 +28,7 @@ import kotlin.math.min
|
|||||||
@Suppress("LeakingThis")
|
@Suppress("LeakingThis")
|
||||||
abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
|
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
|
* 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
|
* 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)
|
val page = adapter.joinedItems.getOrNull(position)
|
||||||
if (page != null && currentPage != page) {
|
if (page != null && currentPage != page) {
|
||||||
val allowPreload = checkAllowPreload(page.first as? ReaderPage)
|
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
|
adapter.pageToShift = page ?: adapter.joinedItems.getOrNull(pager.currentItem)?.first as? ReaderPage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun splitDoublePages(currentPage: ReaderPage) {
|
||||||
|
adapter.splitDoublePages(currentPage)
|
||||||
|
}
|
||||||
|
|
||||||
fun getShiftedPage(): ReaderPage? = adapter.pageToShift
|
fun getShiftedPage(): ReaderPage? = adapter.pageToShift
|
||||||
// SY <--
|
// 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.ReaderPage
|
||||||
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.hasMissingChapters
|
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.createReaderThemeContext
|
||||||
import eu.kanade.tachiyomi.util.system.logcat
|
import eu.kanade.tachiyomi.util.system.logcat
|
||||||
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
|
import eu.kanade.tachiyomi.widget.ViewPagerAdapter
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -358,5 +360,25 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
|
|||||||
}
|
}
|
||||||
viewer.pager.setCurrentItem(index, false)
|
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 <--
|
// SY <--
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user