From c99ddbe10faa7c3d55fcf1d19bf4a14ddada8d4d Mon Sep 17 00:00:00 2001 From: Naputt1 <94742489+naputt1@users.noreply.github.com> Date: Sun, 2 Nov 2025 13:24:42 +0545 Subject: [PATCH] Fix reader tap zones triggering after scrolling was stopped by the user (#2518) Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit ac28b6c80cee7605052299d6f5f43bc588f701d8) --- .../reader/viewer/webtoon/WebtoonRecyclerView.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt index 95cef7345..9b72ee750 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer.webtoon import android.animation.AnimatorSet import android.animation.ValueAnimator +import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet import android.view.HapticFeedbackConstants @@ -34,6 +35,10 @@ class WebtoonRecyclerView @JvmOverloads constructor( private var firstVisibleItemPosition = 0 private var lastVisibleItemPosition = 0 private var currentScale = DEFAULT_RATE + + private var isScrolling = false + private var hasTappedWhileScrolling = false + var zoomOutDisabled = false set(value) { field = value @@ -62,7 +67,11 @@ class WebtoonRecyclerView @JvmOverloads constructor( super.onMeasure(widthSpec, heightSpec) } + @SuppressLint("ClickableViewAccessibility") override fun onTouchEvent(e: MotionEvent): Boolean { + if (e.actionMasked == MotionEvent.ACTION_DOWN) { + hasTappedWhileScrolling = isScrolling + } detector.onTouchEvent(e) return super.onTouchEvent(e) } @@ -82,6 +91,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( val totalItemCount = layoutManager?.itemCount ?: 0 atLastPosition = visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 atFirstPosition = firstVisibleItemPosition == 0 + isScrolling = state != SCROLL_STATE_IDLE } private fun getPositionX(positionX: Float): Float { @@ -215,7 +225,9 @@ class WebtoonRecyclerView @JvmOverloads constructor( inner class GestureListener : GestureDetectorWithLongTap.Listener() { override fun onSingleTapConfirmed(ev: MotionEvent): Boolean { - tapListener?.invoke(ev) + if (!hasTappedWhileScrolling) { + tapListener?.invoke(ev) + } return false }