From ffee78d4f712fdf10a621ed903b6369ab6a6de3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Mon, 8 Jul 2024 15:39:07 +0200 Subject: [PATCH] [UI] Fix closing bottom sheet on scrim view click --- .../navlib/bottomsheet/NavBottomSheet.kt | 18 +++++++++++++----- .../src/main/res/layout/nav_bottom_sheet.xml | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/navlib/src/main/java/pl/szczodrzynski/navlib/bottomsheet/NavBottomSheet.kt b/navlib/src/main/java/pl/szczodrzynski/navlib/bottomsheet/NavBottomSheet.kt index 37439541..e1de95ac 100644 --- a/navlib/src/main/java/pl/szczodrzynski/navlib/bottomsheet/NavBottomSheet.kt +++ b/navlib/src/main/java/pl/szczodrzynski/navlib/bottomsheet/NavBottomSheet.kt @@ -4,6 +4,7 @@ import android.content.Context import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter import android.util.AttributeSet +import android.view.GestureDetector import android.view.LayoutInflater import android.view.MotionEvent import android.view.View @@ -38,7 +39,8 @@ class NavBottomSheet @JvmOverloads constructor( private val list get() = b.bsList - private var bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet) + private val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet) + private val gestureDetector = GestureDetector(context, OnGestureListener()) private val items = ArrayList>() private val adapter = BottomSheetAdapter(items) @@ -58,10 +60,6 @@ class NavBottomSheet @JvmOverloads constructor( WindowInsetsCompat.CONSUMED } - scrimView.setOnClickListener { - isOpen = false - } - var bottomSheetVisible = false bottomSheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { @@ -187,6 +185,8 @@ class NavBottomSheet @JvmOverloads constructor( } fun dispatchBottomSheetEvent(view: View, event: MotionEvent): Boolean { + if (view == scrimView) + gestureDetector.onTouchEvent(event) val location = IntArray(2) bottomSheet.getLocationOnScreen(location) event.setLocation(event.rawX - location[0], event.rawY - location[1]) @@ -215,4 +215,12 @@ class NavBottomSheet @JvmOverloads constructor( fun toggle() { isOpen = !isOpen } + + + inner class OnGestureListener : GestureDetector.SimpleOnGestureListener() { + override fun onSingleTapUp(e: MotionEvent): Boolean { + isOpen = false + return super.onSingleTapUp(e) + } + } } diff --git a/navlib/src/main/res/layout/nav_bottom_sheet.xml b/navlib/src/main/res/layout/nav_bottom_sheet.xml index a882ee43..f899b723 100644 --- a/navlib/src/main/res/layout/nav_bottom_sheet.xml +++ b/navlib/src/main/res/layout/nav_bottom_sheet.xml @@ -14,6 +14,9 @@ android:layout_height="match_parent" android:background="#99000000" android:visibility="invisible" + android:clickable="true" + android:focusable="false" + android:focusableInTouchMode="false" tools:visibility="gone" />