diff --git a/CHANGELOG.md b/CHANGELOG.md index 10240ae90..5724f126e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fixed updating from v0.20.x taking up to hours on libraries with many duplicate entries ([@AntsyLich](https://github.com/AntsyLich)) - Fixed the app staying on the updating screen for good when updating its data failed, it now shows what went wrong, and updating failing on leftover data of deleted entries ([@AntsyLich](https://github.com/AntsyLich)) - Fixed library updates ignoring the smart update restrictions for entries whose details were never fetched ([@AntsyLich](https://github.com/AntsyLich)) +- Fixed resuming a chapter sometimes opening the next chapter partway through, and saving progress to it, in the right to left reader ([@AntsyLich](https://github.com/AntsyLich)) ## [v0.21.0] - 2026-10-12 ### Added diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt index 0fef0b8bc..b240f8997 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt @@ -96,6 +96,8 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { chapters.nextChapter?.pages?.let(newItems::addAll) + val currentItem = items.getOrNull(viewer.pager.currentItem) + // Resets double-page splits, else insert pages get misplaced items.filterIsInstance().also { items.removeAll(it) } @@ -107,6 +109,14 @@ class PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() { items = newItems notifyDataSetChanged() + // The pager only follows the pages it has created, so before its first layout it would stay at the same + // position while pages are added in front, e.g. the next chapter's in right to left, and land in another + // chapter + val currentPosition = items.indexOf(currentItem) + if (currentPosition != -1 && currentPosition != viewer.pager.currentItem) { + viewer.pager.setCurrentItem(currentPosition, false) + } + // Will skip insert page otherwise if (insertPageLastPage != null) { viewer.moveToPage(insertPageLastPage)