More fixes to auto shifting

such as when the first page is a full page and the 2nd page is the left page of a manga (so page 1 and 2 need to be by themselves)
This commit is contained in:
Jays2Kings 2023-02-27 02:02:48 -05:00
parent a29a14970d
commit d93f9d6a45
3 changed files with 11 additions and 7 deletions

View file

@ -599,12 +599,12 @@ class ReaderActivity : BaseActivity<ReaderActivityBinding>() {
return true return true
} }
fun shiftDoublePages(forceShift: Boolean? = null) { fun shiftDoublePages(forceShift: Boolean? = null, page: ReaderPage? = null) {
(viewer as? PagerViewer)?.config?.let { config -> (viewer as? PagerViewer)?.config?.let { config ->
if (forceShift == config.shiftDoublePage) return if (forceShift == config.shiftDoublePage) return
config.shiftDoublePage = !config.shiftDoublePage config.shiftDoublePage = !config.shiftDoublePage
viewModel.state.value.viewerChapters?.let { viewModel.state.value.viewerChapters?.let {
(viewer as? PagerViewer)?.updateShifting() (viewer as? PagerViewer)?.updateShifting(page)
(viewer as? PagerViewer)?.setChaptersDoubleShift(it) (viewer as? PagerViewer)?.setChaptersDoubleShift(it)
invalidateOptionsMenu() invalidateOptionsMenu()
} }

View file

@ -804,10 +804,14 @@ class PagerPageHolder(
if (height < width) { if (height < width) {
imageStream2.close() imageStream2.close()
imageStream.close() imageStream.close()
val oldValue = page.fullPage
page.fullPage = true page.fullPage = true
delayPageUpdate { delayPageUpdate {
if (page.index == 0 && viewer.config.shiftDoublePage) { if (page.index == 0 &&
viewer.activity.shiftDoublePages(false) (viewer.config.shiftDoublePage || extraPage?.isEndPage == true) &&
oldValue != true
) {
viewer.activity.shiftDoublePages(extraPage?.isEndPage == true, extraPage)
} else { } else {
viewer.splitDoublePages(page) viewer.splitDoublePages(page)
} }
@ -921,7 +925,7 @@ class PagerPageHolder(
delayPageUpdate { viewer.splitDoublePages(page) } delayPageUpdate { viewer.splitDoublePages(page) }
} }
fun delayPageUpdate(callback: () -> Unit) { private fun delayPageUpdate(callback: () -> Unit) {
scope.launchUI { scope.launchUI {
delay(100) delay(100)
callback() callback()

View file

@ -298,8 +298,6 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
// If we don't the size change could put us on a new chapter // If we don't the size change could put us on a new chapter
pager.removeOnPageChangeListener(pagerListener) pager.removeOnPageChangeListener(pagerListener)
setChaptersInternal(chapters) setChaptersInternal(chapters)
pager.addOnPageChangeListener(pagerListener)
// Since we removed the listener while shifting, call page change to update the ui
if (!hasMoved) { if (!hasMoved) {
activity.isScrollingThroughPagesOrChapters = true activity.isScrollingThroughPagesOrChapters = true
chapters.currChapter.pages?.let { pages -> chapters.currChapter.pages?.let { pages ->
@ -307,6 +305,8 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
} }
activity.isScrollingThroughPagesOrChapters = false activity.isScrollingThroughPagesOrChapters = false
} }
pager.addOnPageChangeListener(pagerListener)
// Since we removed the listener while shifting, call page change to update the ui
onPageChange(pager.currentItem) onPageChange(pager.currentItem)
} }