Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,6 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
awaitingIdleViewerChapters?.let { viewerChapters ->
setChaptersDoubleShift(viewerChapters)
awaitingIdleViewerChapters = null
if (viewerChapters.currChapter.pages?.size == 1) {
adapter.nextTransition?.to?.let {
activity.requestPreloadChapter(it)
}
}
}
}
}
Expand Down Expand Up @@ -316,6 +311,15 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
pager.addOnPageChangeListener(pagerListener)
// Since we removed the listener while shifting, call page change to update the ui
onPageChange(pager.currentItem)

// When the current chapter has a single page, the forward/backward preload that is normally
// triggered by scrolling onto a transition page never happens because the lone page settles
// at idle. Preload the adjacent chapters here so the user can swipe out of the chapter in
// either direction (see issue #617).
if (chapters.currChapter.pages?.size == 1) {
adapter.prevTransition?.to?.let { activity.requestPreloadChapter(it) }
adapter.nextTransition?.to?.let { activity.requestPreloadChapter(it) }
}
}

fun updateShifting(page: ReaderPage? = null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,18 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
/** Single list of items */
private var subItems: MutableList<ReaderItem> = mutableListOf()

/**
* Cached chapter-transition references. These always describe the chapter pair on either side
* of the current chapter, but they are NOT guaranteed to be present in [joinedItems] (e.g. a
* prev/next chapter that is already loaded is skipped and never added as a transition item).
* Use them to look up the adjacent chapter, not to assume a transition page is displayed.
*/
var nextTransition: ChapterTransition.Next? = null
private set

var prevTransition: ChapterTransition.Prev? = null
private set

/** Page used to start the shifted pages */
var pageToShift: ReaderPage? = null

Expand Down Expand Up @@ -74,9 +83,12 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {
}

// Skip transition page if the chapter is loaded & current page is not a transition page
if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) {
newItems.add(ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter))
}
prevTransition = ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter)
.also {
if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) {
newItems.add(it)
}
}

// Add current chapter.
val currPages = chapters.currChapter.pages
Expand Down