mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-14 22:30:30 +05:30
fix: search results scroll state not preserved when rotating
This commit is contained in:
parent
80ae55b516
commit
6981433231
@ -1,6 +1,8 @@
|
|||||||
package com.github.libretube.ui.fragments
|
package com.github.libretube.ui.fragments
|
||||||
|
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Parcelable
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@ -13,6 +15,7 @@ import androidx.lifecycle.repeatOnLifecycle
|
|||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import androidx.paging.LoadState
|
import androidx.paging.LoadState
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.constants.PreferenceKeys
|
import com.github.libretube.constants.PreferenceKeys
|
||||||
import com.github.libretube.databinding.FragmentSearchResultBinding
|
import com.github.libretube.databinding.FragmentSearchResultBinding
|
||||||
@ -36,6 +39,8 @@ class SearchResultFragment : DynamicLayoutManagerFragment() {
|
|||||||
private val args by navArgs<SearchResultFragmentArgs>()
|
private val args by navArgs<SearchResultFragmentArgs>()
|
||||||
private val viewModel by viewModels<SearchResultViewModel>()
|
private val viewModel by viewModels<SearchResultViewModel>()
|
||||||
|
|
||||||
|
private var recyclerViewState: Parcelable? = null
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
@ -83,6 +88,13 @@ class SearchResultFragment : DynamicLayoutManagerFragment() {
|
|||||||
val searchResultsAdapter = SearchResultsAdapter(timeStamp ?: 0)
|
val searchResultsAdapter = SearchResultsAdapter(timeStamp ?: 0)
|
||||||
binding.searchRecycler.adapter = searchResultsAdapter
|
binding.searchRecycler.adapter = searchResultsAdapter
|
||||||
|
|
||||||
|
binding.searchRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||||
|
super.onScrollStateChanged(recyclerView, newState)
|
||||||
|
recyclerViewState = binding.searchRecycler.layoutManager?.onSaveInstanceState()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
viewLifecycleOwner.lifecycleScope.launch {
|
viewLifecycleOwner.lifecycleScope.launch {
|
||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
searchResultsAdapter.loadStateFlow.collect {
|
searchResultsAdapter.loadStateFlow.collect {
|
||||||
@ -112,6 +124,12 @@ class SearchResultFragment : DynamicLayoutManagerFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
|
super.onConfigurationChanged(newConfig)
|
||||||
|
// manually restore the recyclerview state due to https://github.com/material-components/material-components-android/issues/3473
|
||||||
|
binding.searchRecycler.layoutManager?.onRestoreInstanceState(recyclerViewState)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
_binding = null
|
_binding = null
|
||||||
|
Loading…
Reference in New Issue
Block a user