[Android] Fix audio lists position restoration
Nicolas Pomepuy
git at videolan.org
Mon Sep 23 18:10:38 CEST 2019
vlc-android | branch: 3.2.x | Nicolas Pomepuy <nicolas.pomepuy at gmail.com> | Mon Sep 16 08:58:27 2019 +0200| [7d4d7004a8ac934815b434dad25ea97f705acab5] | committer: Geoffrey Métais
Fix audio lists position restoration
Fixes #1027
(cherry picked from commit fd22be91c582e8b980dc8555534c144be2657b48)
> https://code.videolan.org/videolan/vlc-android/commit/7d4d7004a8ac934815b434dad25ea97f705acab5
---
.../src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt b/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
index 9419290b2..1ed73127d 100644
--- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
+++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.kt
@@ -25,6 +25,7 @@ import android.content.SharedPreferences
import android.content.res.Configuration
import android.os.Bundle
import android.os.Message
+import android.util.SparseArray
import android.view.*
import android.widget.Button
import android.widget.TextView
@@ -71,6 +72,7 @@ class AudioBrowserFragment : BaseAudioBrowser<AudioBrowserViewModel>(), SwipeRef
private lateinit var fastScroller: FastScroller
override val hasTabs = true
private var spacing = 0
+ private var restorePositions: SparseArray<Int> = SparseArray()
/**
* Handle changes on the list
@@ -133,13 +135,15 @@ class AudioBrowserFragment : BaseAudioBrowser<AudioBrowserViewModel>(), SwipeRef
viewPager.adapter = audioPagerAdapter
val tabPosition = settings.getInt(KEY_AUDIO_CURRENT_TAB, 0)
currentTab = tabPosition
- val positions = savedInstanceState?.getIntegerArrayList(KEY_LISTS_POSITIONS)
+ val position = savedInstanceState?.getIntegerArrayList(KEY_LISTS_POSITIONS)
+ position?.withIndex()?.forEach {
+ restorePositions.put(it.index, it.value)
+ }
for (i in 0 until MODE_TOTAL) {
setupLayoutManager(i)
(lists[i].layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
val list = lists[i]
list.adapter = adapters[i]
- if (positions != null) list.scrollToPosition(positions[i])
list.addOnScrollListener(scrollListener)
if (viewModel.providersInCard[i]) {
val lp = list.layoutParams
@@ -216,6 +220,10 @@ class AudioBrowserFragment : BaseAudioBrowser<AudioBrowserViewModel>(), SwipeRef
provider.pagedList.observe(this, Observer { items ->
@Suppress("UNCHECKED_CAST")
if (items != null) adapters[index].submitList(items as PagedList<MediaLibraryItem>?)
+ restorePositions.get(index)?.let {
+ lists[index].scrollToPosition(it)
+ restorePositions.delete(index)
+ }
})
provider.loading.observe(this, Observer { loading ->
if (loading == null || currentTab != index) return at Observer
More information about the Android
mailing list