From ac28b6c80cee7605052299d6f5f43bc588f701d8 Mon Sep 17 00:00:00 2001 From: Naputt1 <94742489+Naputt1@users.noreply.github.com> Date: Sun, 2 Nov 2025 14:39:42 +0700 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> --- CHANGELOG.md | 1 + .../reader/viewer/webtoon/WebtoonRecyclerView.kt | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bf14b7cb..b76c98e12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fix extension download stuck in pending state in some cases ([@c2y5](https://github.com/c2y5)) ([#2483](https://github.com/mihonapp/mihon/pull/2483)) - Fix scrollbar not showing when animator duration scale animation is turned off ([@anirudhsnayak](https://github.com/anirudhsnayak)) ([#2398](https://github.com/mihonapp/mihon/pull/2398)) - Fix date picker not allowing the same start and finish date in negative time zones ([@AntsyLich](https://github.com/AntsyLich), [@kashish-aggarwal21](https://github.com/kashish-aggarwal21)) ([#2617](https://github.com/mihonapp/mihon/pull/2617)) +- Fix reader tap zones triggering after scrolling was stopped by the user ([@Naputt1](https://github.com/Naputt1), [@AntsyLich](https://github.com/AntsyLich)) ([#2518](https://github.com/mihonapp/mihon/pull/2518)) ### Other - Delegate Suwayomi tracker authentication to extension ([@cpiber](https://github.com/cpiber)) ([#2476](https://github.com/mihonapp/mihon/pull/2476)) 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 }