Add check in fastcroller to make sure it doesnt activate while dragging

This commit is contained in:
Jays2Kings 2022-04-23 04:49:16 -04:00
parent 861e0c3ba8
commit 7d9f5dddde
3 changed files with 26 additions and 6 deletions

View file

@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import eu.davidea.fastscroller.FastScroller
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.controller.BaseController
import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.dpToPxEnd
import eu.kanade.tachiyomi.util.system.isLTR
@ -20,6 +21,7 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
var canScroll = false
var startY = -1f
var scrollOffset = 0
var controller: BaseController<*>? = null
init {
setViewsToUse(
R.layout.material_fastscroll,
@ -36,8 +38,10 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
// Overriding to force a distance moved before scrolling
override fun onTouchEvent(event: MotionEvent): Boolean {
if (recyclerView.computeVerticalScrollRange() <= recyclerView.computeVerticalScrollExtent()) {
return if (startY > -1f) {
if (controller?.isDragging == true ||
recyclerView.computeVerticalScrollRange() <= recyclerView.computeVerticalScrollExtent()
) {
return if (startY > -1f || controller?.isDragging == true) {
dispatchTouchToRecycler(event)
false
} else {

View file

@ -8,7 +8,10 @@ import android.widget.LinearLayout
import androidx.core.view.WindowInsetsCompat.Type.systemBars
import androidx.core.view.isInvisible
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.DownloadService
import eu.kanade.tachiyomi.data.download.model.Download
@ -32,8 +35,9 @@ class DownloadBottomSheet @JvmOverloads constructor(
attrs: AttributeSet? =
null
) : LinearLayout(context, attrs),
DownloadAdapter.DownloadItemListener {
lateinit var controller: RecentsController
DownloadAdapter.DownloadItemListener,
FlexibleAdapter.OnActionStateListener {
var controller: RecentsController? = null
var sheetBehavior: BottomSheetBehavior<*>? = null
/**
@ -69,7 +73,9 @@ class DownloadBottomSheet @JvmOverloads constructor(
binding.dlRecycler.adapter = adapter
adapter?.isHandleDragEnabled = true
adapter?.isSwipeEnabled = true
adapter?.isSwipeEnabled = true
adapter?.fastScroller = binding.fastScroller
binding.fastScroller.controller = controller
binding.dlRecycler.setHasFixedSize(true)
binding.dlRecycler.addItemDecoration(ExtensionDividerItemDecoration(context))
this.controller = controller
@ -156,6 +162,12 @@ class DownloadBottomSheet @JvmOverloads constructor(
setBottomSheet()
}
override fun onActionStateChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
controller?.isDragging = true
}
}
/**
* Called when the progress of a download changes.
*
@ -265,7 +277,7 @@ class DownloadBottomSheet @JvmOverloads constructor(
sheetBehavior?.skipCollapsed = !hasQueue
if (sheetBehavior.isCollapsed()) sheetBehavior?.hide()
}
controller.setPadding(!hasQueue)
controller?.setPadding(!hasQueue)
}
/**
@ -274,6 +286,7 @@ class DownloadBottomSheet @JvmOverloads constructor(
* @param position The position of the released item.
*/
override fun onItemReleased(position: Int) {
controller?.isDragging = false
val adapter = adapter ?: return
val downloads = adapter.headerItems.flatMap { header ->
adapter.getSectionItems(header).map { item ->
@ -301,7 +314,7 @@ class DownloadBottomSheet @JvmOverloads constructor(
}
}
presenter.reorder(downloads)
controller.updateChapterDownload(download, false)
controller?.updateChapterDownload(download, false)
}
/**
@ -354,5 +367,6 @@ class DownloadBottomSheet @JvmOverloads constructor(
fun onDestroy() {
presenter.onDestroy()
binding.fastScroller.controller = null
}
}

View file

@ -533,6 +533,7 @@ class LibraryController(
binding.libraryGridRecycler.recycler.adapter = adapter
adapter.fastScroller = binding.fastScroller
binding.fastScroller.controller = this
binding.libraryGridRecycler.recycler.addOnScrollListener(scrollListener)
binding.swipeRefresh.setStyle()
@ -997,6 +998,7 @@ class LibraryController(
destroyActionModeIfNeeded()
if (isBindingInitialized) {
binding.libraryGridRecycler.recycler.removeOnScrollListener(scrollListener)
binding.fastScroller.controller = null
}
displaySheet?.dismiss()
displaySheet = null