Fix reader state not being restored

This commit is contained in:
vianh
2024-07-30 18:45:13 +07:00
committed by Koitharu
parent 4044936481
commit 1a17324d26
2 changed files with 7 additions and 19 deletions

View File

@@ -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

View File

@@ -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<B : ViewBinding> : BaseFragment<B>(), ZoomControl.ZoomControlListener {
protected val viewModel by activityViewModels<ReaderViewModel>()
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<ReaderState>(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<B : ViewBinding> : BaseFragment<B>(), 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"
}