From 7adfb921fa5d42f527481a7ea3ba942d6a667685 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Fri, 18 Jun 2021 15:19:15 -0600 Subject: [PATCH] recycler: make fast scroller respond to changes Make the fast scroller respond to changes in the RecyclerView data. This again prepares it for use in the library with it's sorting and item configuration. --- .../org/oxycblt/auxio/songs/FastScrollView.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt b/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt index 056072aa5..9ba37054f 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/FastScrollView.kt @@ -49,6 +49,31 @@ class FastScrollView @JvmOverloads constructor( private var mRecycler: RecyclerView? = null private var mGetItem: ((Int) -> Char)? = null + private val mObserver = object : RecyclerView.AdapterDataObserver() { + override fun onChanged() = postIndicatorUpdate() + + override fun onItemRangeChanged( + positionStart: Int, + itemCount: Int, + payload: Any? + ) = postIndicatorUpdate() + + override fun onItemRangeInserted( + positionStart: Int, + itemCount: Int + ) = onChanged() + + override fun onItemRangeMoved( + fromPosition: Int, + toPosition: Int, + itemCount: Int + ) = onChanged() + + override fun onItemRangeRemoved( + positionStart: Int, + itemCount: Int + ) = onChanged() + } // --- INDICATORS --- @@ -93,6 +118,8 @@ class FastScrollView @JvmOverloads constructor( mRecycler = recycler mGetItem = getItem + recycler.adapter?.registerAdapterDataObserver(mObserver) + postIndicatorUpdate() }