From cb5b61826633d72116da5e3916fbf0642d5a96cf Mon Sep 17 00:00:00 2001 From: NGB-Was-Taken <76197326+NGB-Was-Taken@users.noreply.github.com> Date: Fri, 14 Nov 2025 12:55:19 +0545 Subject: [PATCH] Stop tap zones from triggering when scrolling is stopped by tapping (#2680) (cherry picked from commit 2ec67ac0c1831a68d8d73e2679f8c98a5a48acf5) --- .../ui/reader/viewer/webtoon/WebtoonFrame.kt | 1 + .../viewer/webtoon/WebtoonRecyclerView.kt | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt index 17aafc6fd..e98ff2a67 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt @@ -103,6 +103,7 @@ class WebtoonFrame(context: Context) : FrameLayout(context) { velocityX: Float, velocityY: Float, ): Boolean { + recycler?.onManualScroll() return recycler?.zoomFling(velocityX.toInt(), velocityY.toInt()) ?: false } } 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..c2ed4aaf2 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 @@ -52,6 +52,9 @@ class WebtoonRecyclerView @JvmOverloads constructor( var tapListener: ((MotionEvent) -> Unit)? = null var longTapListener: ((MotionEvent) -> Boolean)? = null + private var isManuallyScrolling = false + private var tapDuringManualScroll = false + override fun onMeasure(widthSpec: Int, heightSpec: Int) { halfWidth = MeasureSpec.getSize(widthSpec) / 2 halfHeight = MeasureSpec.getSize(heightSpec) / 2 @@ -63,6 +66,10 @@ class WebtoonRecyclerView @JvmOverloads constructor( } override fun onTouchEvent(e: MotionEvent): Boolean { + if (e.actionMasked == MotionEvent.ACTION_DOWN) { + tapDuringManualScroll = isManuallyScrolling + } + detector.onTouchEvent(e) return super.onTouchEvent(e) } @@ -82,6 +89,10 @@ class WebtoonRecyclerView @JvmOverloads constructor( val totalItemCount = layoutManager?.itemCount ?: 0 atLastPosition = visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 atFirstPosition = firstVisibleItemPosition == 0 + + if (state == SCROLL_STATE_IDLE) { + isManuallyScrolling = false + } } private fun getPositionX(positionX: Float): Float { @@ -212,10 +223,16 @@ class WebtoonRecyclerView @JvmOverloads constructor( } } + fun onManualScroll() { + isManuallyScrolling = true + } + inner class GestureListener : GestureDetectorWithLongTap.Listener() { override fun onSingleTapConfirmed(ev: MotionEvent): Boolean { - tapListener?.invoke(ev) + if (!tapDuringManualScroll) { + tapListener?.invoke(ev) + } return false }