From 9fb2a859df16216a4f31e1be02433a3d9ae4936a Mon Sep 17 00:00:00 2001 From: luwucifer Date: Thu, 5 Mar 2026 15:36:28 +0530 Subject: [PATCH] Fix(Whiteboard): Side System Gesture Exclusion --- .../reviewer/whiteboard/WhiteboardToolbar.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/whiteboard/WhiteboardToolbar.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/whiteboard/WhiteboardToolbar.kt index b314679eaec7..d795280157ef 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/whiteboard/WhiteboardToolbar.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ui/windows/reviewer/whiteboard/WhiteboardToolbar.kt @@ -16,6 +16,7 @@ package com.ichi2.anki.ui.windows.reviewer.whiteboard import android.content.Context +import android.graphics.Rect import android.util.AttributeSet import android.view.LayoutInflater import android.view.MotionEvent @@ -23,6 +24,7 @@ import android.view.View import android.view.ViewConfiguration import android.view.animation.DecelerateInterpolator import android.widget.LinearLayout +import androidx.core.view.ViewCompat import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.LinearLayoutManager import com.ichi2.anki.databinding.ViewWhiteboardToolbarBinding @@ -66,6 +68,28 @@ class WhiteboardToolbar : LinearLayout { var onBrushLongClick: ((index: Int) -> Unit)? = null var onToolbarVisibilityChanged: ((isShown: Boolean) -> Unit)? = null + /** + * Disables gesture swipe of docked whiteboard toolbar on the side on layout change + * While this code does attempt to set exclusion rect when ToolbarAlignment.BOTTOM, + * no effect occurs as bottom screen gestures cannot be opted out of + * https://developer.android.com/develop/ui/views/touch-and-input/gestures/gesturenav#kotlin + */ + private val boundingBox: Rect = Rect() + private val exclusions = listOf(boundingBox) + + override fun onLayout( + changed: Boolean, + left: Int, + top: Int, + right: Int, + bottom: Int, + ) { + super.onLayout(changed, left, top, right, bottom) + if (!changed) return + boundingBox.set(left, top, right, bottom) + ViewCompat.setSystemGestureExclusionRects(this, exclusions) + } + /** * Updates the internal layout based on the toolbar alignment. * Switches the RecyclerView orientation and the main layout orientation.