Fix next chapter button occasionally jumping to the last page of the current chapter (#1920)

This commit is contained in:
perokhe
2025-03-27 08:25:25 -06:00
committed by GitHub
parent 365d167eac
commit 941dde341e
2 changed files with 20 additions and 14 deletions

View File

@ -16,6 +16,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co
### Fixes
- Fix Bangumi search results including novels ([@MajorTanya](https://github.com/MajorTanya)) ([#1885](https://github.com/mihonapp/mihon/pull/1885))
- Fix next chapter button occasionally jumping to the last page of the current chapter ([@perokhe](https://github.com/perokhe)) ([#1920](https://github.com/mihonapp/mihon/pull/1920))
## [v0.18.0] - 2025-03-20
### Added

View File

@ -80,6 +80,19 @@ abstract class PagerViewer(val activity: ReaderActivity) : Viewer {
}
}
private val pagerListener = object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
if (!activity.isScrollingThroughPages) {
activity.hideMenu()
}
onPageChange(position)
}
override fun onPageScrollStateChanged(state: Int) {
isIdle = state == ViewPager.SCROLL_STATE_IDLE
}
}
init {
pager.isVisible = false // Don't layout the pager yet
pager.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
@ -87,20 +100,7 @@ abstract class PagerViewer(val activity: ReaderActivity) : Viewer {
pager.offscreenPageLimit = 1
pager.id = R.id.reader_pager
pager.adapter = adapter
pager.addOnPageChangeListener(
object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
if (!activity.isScrollingThroughPages) {
activity.hideMenu()
}
onPageChange(position)
}
override fun onPageScrollStateChanged(state: Int) {
isIdle = state == ViewPager.SCROLL_STATE_IDLE
}
},
)
pager.addOnPageChangeListener(pagerListener)
pager.tapListener = { event ->
val viewPosition = IntArray(2)
pager.getLocationOnScreen(viewPosition)
@ -275,6 +275,9 @@ abstract class PagerViewer(val activity: ReaderActivity) : Viewer {
* Sets the active [chapters] on this pager.
*/
private fun setChaptersInternal(chapters: ViewerChapters) {
// Remove listener so the change in item doesn't trigger it
pager.removeOnPageChangeListener(pagerListener)
val forceTransition = config.alwaysShowChapterTransition ||
adapter.items.getOrNull(pager.currentItem) is ChapterTransition
adapter.setChapters(chapters, forceTransition)
@ -286,6 +289,8 @@ abstract class PagerViewer(val activity: ReaderActivity) : Viewer {
moveToPage(pages[min(chapters.currChapter.requestedPage, pages.lastIndex)])
pager.isVisible = true
}
pager.addOnPageChangeListener(pagerListener)
}
/**