From 941dde341eb11703eadae543f351c9284617541c Mon Sep 17 00:00:00 2001 From: perokhe <81130286+perokhe@users.noreply.github.com> Date: Thu, 27 Mar 2025 08:25:25 -0600 Subject: [PATCH] Fix next chapter button occasionally jumping to the last page of the current chapter (#1920) --- CHANGELOG.md | 1 + .../ui/reader/viewer/pager/PagerViewer.kt | 33 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3efc2ed27..ef67c5aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt index ffa38bfba..cdd92a9f1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt @@ -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) } /**