Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2169737d authored by William Xiao's avatar William Xiao
Browse files

Fix issues when opening glanceable hub slowly

When opening the glanceable hub with a slow drag, it seems that
SceneContainerLayout may not consume all touches. Instead of returning
the result of dispatchTouchEvent, we just return true from our touch
handling logic as the touch should not be seen by anyone else.

Bug: 315207481
Test: atest NotificationShadeWindowViewControllerTest GlanceableHubContainerControllerTest
Flag: ACONFIG com.android.systemui.communal_hub DEVELOPMENT
Change-Id: I7d5964e0ed7d62c9ff71d9bdf51452080cc81ced
parent c5a688f0
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -157,7 +157,10 @@ constructor(
        // If the hub is fully visible, send all touch events to it.
        val communalVisible = hubShowing && !hubOccluded
        if (communalVisible) {
            return communalContainerView.dispatchTouchEvent(ev)
            communalContainerView.dispatchTouchEvent(ev)
            // Return true regardless of dispatch result as some touches at the start of a gesture
            // may return false from dispatchTouchEvent.
            return true
        }

        if (edgeSwipeRegionWidth == 0) {
@@ -172,13 +175,19 @@ constructor(
                x >= communalContainerView.width - edgeSwipeRegionWidth
            if (inOpeningSwipeRegion && !hubOccluded) {
                isTrackingOpenGesture = true
                return communalContainerView.dispatchTouchEvent(ev)
                communalContainerView.dispatchTouchEvent(ev)
                // Return true regardless of dispatch result as some touches at the start of a
                // gesture may return false from dispatchTouchEvent.
                return true
            }
        } else if (isTrackingOpenGesture) {
            if (isUp || isCancel) {
                isTrackingOpenGesture = false
            }
            return communalContainerView.dispatchTouchEvent(ev)
            communalContainerView.dispatchTouchEvent(ev)
            // Return true regardless of dispatch result as some touches at the start of a gesture
            // may return false from dispatchTouchEvent.
            return true
        }

        return false