Improve: Don't refresh Apps List on going back

This commit is contained in:
LooKeR 2021-11-24 08:55:22 +05:30
parent 804533133d
commit 750718c11c

View File

@ -2,6 +2,7 @@ package com.looker.droidify.ui.appsList
import android.database.Cursor
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -31,6 +32,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
companion object {
private const val EXTRA_SOURCE = "source"
private const val STATE_LAYOUT_MANAGER = "layoutManager"
}
enum class Source(val titleResId: Int, val sections: Boolean, val order: Boolean) {
@ -48,6 +50,8 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
val source: Source
get() = requireArguments().getString(EXTRA_SOURCE)!!.let(Source::valueOf)
private var layoutManagerState: Parcelable? = null
private var recyclerView: RecyclerView? = null
private var repositoriesDisposable: Disposable? = null
@ -73,6 +77,7 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
layoutManagerState = savedInstanceState?.getParcelable(STATE_LAYOUT_MANAGER)
screenActivity.cursorOwner.attach(this, viewModel.request(source))
repositoriesDisposable = Observable.just(Unit)
@ -94,6 +99,12 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
repositoriesDisposable = null
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
(layoutManagerState ?: recyclerView?.layoutManager?.onSaveInstanceState())
?.let { outState.putParcelable(STATE_LAYOUT_MANAGER, it) }
}
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {
(recyclerView?.adapter as? AppListAdapter)?.apply {
this.cursor = cursor
@ -112,6 +123,10 @@ class AppListFragment() : BaseFragment(), CursorOwner.Callback {
}
}
}
layoutManagerState?.let {
layoutManagerState = null
recyclerView?.layoutManager?.onRestoreInstanceState(it)
}
}
internal fun setSearchQuery(searchQuery: String) {