From 2ec67ac0c1831a68d8d73e2679f8c98a5a48acf5 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) --- CHANGELOG.md | 4 ++++ .../ui/reader/viewer/webtoon/WebtoonFrame.kt | 1 + .../viewer/webtoon/WebtoonRecyclerView.kt | 19 ++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4be1003b6..eceff7cf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - `Fixed` - for any bug fixes. - `Other` - for technical stuff. +## [Unreleased] +### Fixed +- Fix reader tap zones triggering after scrolling is stopped by tapping ([@NGB-Was-Taken](https://github.com/NGB-Was-Taken)) ([#2680](https://github.com/mihonapp/mihon/pull/2680)) + ## [v0.19.3] - 2025-11-07 ### Improved - Improved various aspects of the WebView multi window support ([@TheUnlocked](https://github.com/TheUnlocked)) ([#2662](https://github.com/mihonapp/mihon/pull/2662)) 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 }