From 750718c11c67fab4b7789d4c456eb59d1945ad33 Mon Sep 17 00:00:00 2001 From: LooKeR Date: Wed, 24 Nov 2021 08:55:22 +0530 Subject: [PATCH] Improve: Don't refresh Apps List on going back --- .../droidify/ui/appsList/AppListFragment.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt index e37d0079..8334f8e7 100644 --- a/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/appsList/AppListFragment.kt @@ -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) {