diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 38ccf2da1..759287ec9 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -73,7 +73,7 @@ private const val PREFETCH_LIMIT = 10 class ReaderViewModel @Inject constructor( - savedStateHandle: SavedStateHandle, + private val savedStateHandle: SavedStateHandle, private val dataRepository: MangaDataRepository, private val historyRepository: HistoryRepository, private val bookmarksRepository: BookmarksRepository, @@ -223,6 +223,7 @@ constructor( fun saveCurrentState(state: ReaderState? = null) { if (state != null) { currentState.value = state + savedStateHandle[ReaderActivity.EXTRA_STATE] = state } if (incognitoMode.value) { return diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/BaseReaderFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/BaseReaderFragment.kt index adec238ec..04fa68a81 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/BaseReaderFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/pager/BaseReaderFragment.kt @@ -13,28 +13,23 @@ import org.koitharu.kotatsu.core.util.ext.observe import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.ReaderViewModel -private const val KEY_STATE = "state" - abstract class BaseReaderFragment : BaseFragment(), ZoomControl.ZoomControlListener { protected val viewModel by activityViewModels() - private var stateToSave: ReaderState? = null protected var readerAdapter: BaseReaderAdapter<*>? = null private set override fun onViewBindingCreated(binding: B, savedInstanceState: Bundle?) { super.onViewBindingCreated(binding, savedInstanceState) - var restoredState = savedInstanceState?.getParcelableCompat(KEY_STATE) readerAdapter = onCreateAdapter() viewModel.content.observe(viewLifecycleOwner) { - var pendingState = restoredState ?: it.state - if (pendingState == null && it.pages.isNotEmpty() && readerAdapter?.hasItems != true) { - pendingState = viewModel.getCurrentState() + if (it.state == null && it.pages.isNotEmpty() && readerAdapter?.hasItems != true) { + onPagesChanged(it.pages, viewModel.getCurrentState()) + } else { + onPagesChanged(it.pages, it.state) } - onPagesChanged(it.pages, pendingState) - restoredState = null } } @@ -44,19 +39,11 @@ abstract class BaseReaderFragment : BaseFragment(), ZoomCont } override fun onDestroyView() { - stateToSave = getCurrentState() + viewModel.saveCurrentState(getCurrentState()) readerAdapter = null super.onDestroyView() } - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - getCurrentState()?.let { - stateToSave = it - } - outState.putParcelable(KEY_STATE, stateToSave) - } - protected fun requireAdapter() = checkNotNull(readerAdapter) { "Adapter was not created or already destroyed" }