From 6c1dba18311d7919915e1cd97eda7e98dc54ede9 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Thu, 26 Sep 2024 08:12:14 +0700 Subject: [PATCH] fix(GestureDetector): Prevent crashes caused by firstEvent being null on some devices --- CHANGELOG.md | 1 + .../tachiyomi/ui/library/LibraryCategoryGestureDetector.kt | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8db6577925..da9829a245 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ The format is simplified version of [Keep a Changelog](https://keepachangelog.co - Fixed "Group by Ungrouped" showing duplicate entries - Fixed reader sometimes won't load images - Handle some uncaught crashes +- Fixed crashes due to GestureDetector's firstEvent is sometimes null on some devices ### Other - Simplify network helper code diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryGestureDetector.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryGestureDetector.kt index f52b8aedfd..2ed0b53865 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryGestureDetector.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryGestureDetector.kt @@ -44,13 +44,14 @@ class LibraryCategoryGestureDetector(private val controller: LibraryController?) distanceX: Float, distanceY: Float, ): Boolean { + val firstEvent = e1 ?: return false val controller = controller ?: return false val distance = startingX - e2.x val totalDistanceY = startingY - e2.y controller.binding.libraryGridRecycler.recycler.translationX = if (!cancelled) abs(distance / 50).pow(poa) * -sign(distance / 50) else 0f if (!locked && abs(distance) > 50 && !cancelled) { - val ev2 = MotionEvent.obtain(e1) + val ev2 = MotionEvent.obtain(firstEvent) ev2.action = MotionEvent.ACTION_CANCEL controller.binding.swipeRefresh.dispatchTouchEvent(ev2) ev2.recycle() @@ -59,7 +60,7 @@ class LibraryCategoryGestureDetector(private val controller: LibraryController?) cancelled = true return false } - return super.onScroll(e1, e2, distanceX, distanceY) + return super.onScroll(firstEvent, e2, distanceX, distanceY) } override fun onFling(