Fix screen rotation causing reader to jump back to initial page

- Modified BaseReaderFragment to always use getCurrentState() when available
- getCurrentState() contains the most recent reading position saved in onPause/onDestroyView
- content.state may contain the initial state from when content was first loaded
- This ensures the current page position is preserved across configuration changes like screen rotation

Co-authored-by: NathanBap <101987516+NathanBap@users.noreply.github.com>
devel
copilot-swe-agent[bot] 7 months ago committed by Koitharu
parent 6292a0fd6b
commit aeb3732d75

@ -25,8 +25,15 @@ abstract class BaseReaderFragment<B : ViewBinding> : BaseFragment<B>(), ZoomCont
readerAdapter = onCreateAdapter() readerAdapter = onCreateAdapter()
viewModel.content.observe(viewLifecycleOwner) { viewModel.content.observe(viewLifecycleOwner) {
// Use getCurrentState() to handle configuration changes (e.g., screen rotation) properly.
// getCurrentState() always has the most recent reading position, while content.state
// may contain the initial state from when content was first loaded.
val currentState = viewModel.getCurrentState()
if (it.state == null && it.pages.isNotEmpty() && readerAdapter?.hasItems != true) { if (it.state == null && it.pages.isNotEmpty() && readerAdapter?.hasItems != true) {
onPagesChanged(it.pages, viewModel.getCurrentState()) onPagesChanged(it.pages, currentState)
} else if (currentState != null) {
// If we have a current state, use it instead of content.state
onPagesChanged(it.pages, currentState)
} else { } else {
onPagesChanged(it.pages, it.state) onPagesChanged(it.pages, it.state)
} }

Loading…
Cancel
Save