Fix reader state restoration

This commit is contained in:
Koitharu
2021-02-16 20:22:18 +02:00
parent d9d5595bde
commit 4cd0cb04a3
3 changed files with 19 additions and 12 deletions

View File

@@ -124,11 +124,6 @@ class ReaderActivity : BaseFullscreenActivity<ActivityReaderBinding>(),
}
}
override fun onPause() {
viewModel.saveCurrentState(reader?.getCurrentState())
super.onPause()
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.opt_reader_top, menu)
return super.onCreateOptionsMenu(menu)

View File

@@ -18,29 +18,34 @@ abstract class BaseReader<B : ViewBinding> : BaseFragment<B>() {
protected val loader by lazy(LazyThreadSafetyMode.NONE) {
PageLoader(lifecycleScope, get(), get())
}
private var lastReaderState: ReaderState? = null
private var stateToSave: ReaderState? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
lastReaderState = savedInstanceState?.getParcelable(KEY_STATE) ?: lastReaderState
var restoredState = savedInstanceState?.getParcelable<ReaderState?>(KEY_STATE)
viewModel.content.observe(viewLifecycleOwner) {
onPagesChanged(it.pages, lastReaderState ?: it.state)
lastReaderState = null
onPagesChanged(it.pages, restoredState ?: it.state)
restoredState = null
}
}
override fun onPause() {
super.onPause()
viewModel.saveCurrentState(getCurrentState())
}
override fun onDestroyView() {
lastReaderState = getCurrentState()
stateToSave = getCurrentState()
super.onDestroyView()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
getCurrentState()?.let {
lastReaderState = it
stateToSave = it
}
outState.putParcelable(KEY_STATE, lastReaderState)
outState.putParcelable(KEY_STATE, stateToSave)
}
override fun onWindowInsetsChanged(insets: Insets) = Unit