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

Commit 79623ef9 authored by Sergey Serokurov's avatar Sergey Serokurov
Browse files

Make only top bubble clickable when stack is collapsed

Bug: 157934340
Test: atest SystemUITests
Test: manual, screen recording https://drive.google.com/file/d/12itDLsVQZrCQVYMjgJhuWlTslOJdyGqy/view?usp=sharing
Change-Id: I865a8d508965e88e78e516143915fd895d4f3782
parent d9334944
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1319,6 +1319,7 @@ public class BubbleController {
     * Updates the visibility of the bubbles based on current state.
     * Does not un-bubble, just hides or un-hides.
     * Updates stack description for TalkBack focus.
     * Updates bubbles' icon views clickable states
     */
    public void updateStack() {
        if (mStackView == null) {
@@ -1336,6 +1337,8 @@ public class BubbleController {
        }

        mStackView.updateContentDescription();

        mStackView.updateBubblesClickableStates();
    }

    @VisibleForTesting
+19 −0
Original line number Diff line number Diff line
@@ -1485,6 +1485,25 @@ public class BubbleStackView extends FrameLayout
        }
    }

    /**
     * Update bubbles' icon views clickable states.
     */
    public void updateBubblesClickableStates() {
        for (int i = 0; i < mBubbleData.getBubbles().size(); i++) {
            final Bubble bubble = mBubbleData.getBubbles().get(i);
            if (bubble.getIconView() != null) {
                if (mIsExpanded) {
                    // when stack is expanded all bubbles are clickable
                    bubble.getIconView().setClickable(true);
                } else {
                    // when stack is collapsed, only the top bubble needs to be clickable,
                    // so that a11y ignores all the inaccessible bubbles in the stack
                    bubble.getIconView().setClickable(i == 0);
                }
            }
        }
    }

    private void updateSystemGestureExcludeRects() {
        // Exclude the region occupied by the first BubbleView in the stack
        Rect excludeZone = mSystemGestureExclusionRects.get(0);