Skip to content
Snippets Groups Projects
Commit d83a24c2 authored by Nicolas Pomepuy's avatar Nicolas Pomepuy
Browse files

Fix fast scroller visibility and threshold calculation

Fixes #2658
parent f30e6704
No related branches found
No related tags found
1 merge request!1505Fix fast scroller visibility and threshold calculation
Pipeline #258130 passed with stage
in 8 minutes and 16 seconds
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
......@@ -35,7 +34,7 @@
</org.videolan.vlc.gui.view.SwipeRefreshLayout>
<org.videolan.vlc.gui.view.FastScroller
android:id="@+id/songs_fast_scroller"
android:id="@+id/songs_fast_scroller_playlist"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
......
......@@ -97,7 +97,7 @@ class PlaylistFragment : BaseAudioBrowser<PlaylistsViewModel>(), SwipeRefreshLay
setupLayoutManager()
playlists.adapter = playlistAdapter
fastScroller = view.rootView.findViewById(R.id.songs_fast_scroller) as FastScroller
fastScroller = view.rootView.findViewById(R.id.songs_fast_scroller_playlist) as FastScroller
fastScroller.attachToCoordinator(view.rootView.findViewById(R.id.appbar) as AppBarLayout, view.rootView.findViewById(R.id.coordinator) as CoordinatorLayout, view.rootView.findViewById(R.id.fab) as FloatingActionButton)
}
......
......@@ -43,15 +43,16 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.floatingactionbutton.FloatingActionButton
import kotlinx.coroutines.*
import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.actor
import kotlinx.coroutines.delay
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.util.HeadersIndex
import org.videolan.tools.WeakHandler
import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.resources.util.HeadersIndex
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
import org.videolan.tools.WeakHandler
import org.videolan.vlc.util.scope
import java.util.concurrent.atomic.AtomicBoolean
import kotlin.math.max
......@@ -72,7 +73,8 @@ private const val ITEM_THRESHOLD = 25
class FastScroller : LinearLayout, Observer<HeadersIndex> {
private var currentHeight: Int = 0
private var itemCount: Int = 0
private val itemCount: Int
get() = recyclerView.adapter?.itemCount ?: 0
private var fastScrolling: Boolean = false
private var showBubble: Boolean = false
private var currentPosition: Int = 0
......@@ -99,8 +101,8 @@ class FastScroller : LinearLayout, Observer<HeadersIndex> {
private val handler = object : WeakHandler<FastScroller>(this) {
override fun handleMessage(msg: Message) {
when (msg.what) {
HIDE_HANDLE -> hideBubble()
HIDE_SCROLLER -> this@FastScroller.visibility = View.INVISIBLE
HIDE_HANDLE -> hideBubble()
HIDE_SCROLLER -> this@FastScroller.visibility = View.INVISIBLE
SHOW_SCROLLER -> {
if (itemCount < ITEM_THRESHOLD) {
return
......@@ -228,7 +230,6 @@ class FastScroller : LinearLayout, Observer<HeadersIndex> {
this.layoutManager = recyclerView.layoutManager as LinearLayoutManager
this.recyclerView.removeOnScrollListener(scrollListener)
visibility = View.INVISIBLE
itemCount = recyclerView.adapter!!.itemCount
if (this::provider.isInitialized) this.provider.liveHeaders.removeObserver(this)
this.provider = provider
provider.liveHeaders.observeForever(this)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment