Improvements to fast scroller

Now able to tap behind the fastscroller, aka the entire the right side of the screen, which helps actually tap the download button in manga details (and fixes #1113)
This commit is contained in:
Jays2Kings 2022-04-22 14:36:05 -04:00
parent 1657a088ef
commit 1596bce43e
3 changed files with 19 additions and 5 deletions

View file

@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.base
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.MotionEvent import android.view.MotionEvent
import androidx.core.view.ViewCompat
import androidx.core.view.marginTop import androidx.core.view.marginTop
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -45,9 +44,9 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
MotionEvent.ACTION_DOWN -> { MotionEvent.ACTION_DOWN -> {
if ( if (
if (context.resources.isLTR) { if (context.resources.isLTR) {
event.x < handle.x - ViewCompat.getPaddingStart(handle) event.x < handle.x - handle.paddingStart
} else { } else {
event.x > handle.width + ViewCompat.getPaddingStart(handle) event.x > handle.width + handle.paddingStart
} }
) return false ) return false
val y = event.y val y = event.y
@ -59,7 +58,9 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
showScrollbar() showScrollbar()
setBubbleAndHandlePosition(y) setBubbleAndHandlePosition(y)
setRecyclerViewPosition(y) setRecyclerViewPosition(y)
return true
} }
dispatchTouchToRecycler(event)
return true return true
} }
MotionEvent.ACTION_MOVE -> { MotionEvent.ACTION_MOVE -> {
@ -70,6 +71,7 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
notifyScrollStateChange(true) notifyScrollStateChange(true)
showBubble() showBubble()
showScrollbar() showScrollbar()
dispatchTouchToRecycler(event) { action = MotionEvent.ACTION_CANCEL }
} }
if (canScroll) { if (canScroll) {
setBubbleAndHandlePosition(y) setBubbleAndHandlePosition(y)
@ -79,12 +81,23 @@ class MaterialFastScroll @JvmOverloads constructor(context: Context, attrs: Attr
} }
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
startY = 0f startY = 0f
if (!canScroll) {
dispatchTouchToRecycler(event)
}
canScroll = false canScroll = false
} }
} }
return super.onTouchEvent(event) return super.onTouchEvent(event)
} }
private fun dispatchTouchToRecycler(event: MotionEvent, block: (MotionEvent.() -> Unit)? = null) {
val ev2 = MotionEvent.obtain(event)
ev2.offsetLocation(this.x, this.y)
block?.invoke(ev2)
recyclerView.dispatchTouchEvent(ev2)
ev2.recycle()
}
override fun setBubbleAndHandlePosition(y: Float) { override fun setBubbleAndHandlePosition(y: Float) {
super.setBubbleAndHandlePosition(y) super.setBubbleAndHandlePosition(y)
if (bubbleEnabled) { if (bubbleEnabled) {

View file

@ -93,9 +93,8 @@
<include <include
layout="@layout/download_button" layout="@layout/download_button"
android:id="@+id/download_button" android:id="@+id/download_button"
android:layout_width="50dp" android:layout_width="54dp"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginEnd="4dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View file

@ -13,6 +13,7 @@
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_gravity="center" android:layout_gravity="center"
android:contentDescription="@string/download"
android:src="@drawable/border_circle" android:src="@drawable/border_circle"
android:padding="3dp"/> android:padding="3dp"/>
@ -43,6 +44,7 @@
app:tint="?attr/colorSecondary" app:tint="?attr/colorSecondary"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_width="30dp" android:layout_width="30dp"
android:contentDescription="@string/download"
android:layout_height="30dp" android:layout_height="30dp"
android:background="@drawable/round_ripple" android:background="@drawable/round_ripple"
android:padding="5dp" android:padding="5dp"