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

Commit 7b4cf9c4 authored by Longbo Wei's avatar Longbo Wei
Browse files

a11y: Remove indicator when hovering on directional buttons

Autoclick indicator appears on all scroll panel buttons, causing visual
distraction during scrolling. We should remove the indicator when it is
on directional buttons.

Video: http://shortn/_XJT8X9VxAF

Bug: b/403624552
Test: AutoclickControllerTest
Flag: com.android.server.accessibility.enable_autoclick_indicator
Change-Id: Ia0fb0387e6e1d3ee1cf846a8c7dfaa9f0967fd51
parent ce63dc85
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -152,11 +152,22 @@ public class AutoclickController extends BaseEventStreamTransformation {
                    if (direction == AutoclickScrollPanel.DIRECTION_EXIT) {
                        return;
                    }
                    // For direction buttons, perform scroll action immediately.
                    if (hovered && direction != AutoclickScrollPanel.DIRECTION_NONE) {

                    // Handle all non-exit buttons when hovered.
                    if (hovered) {
                        // Clear the indicator.
                        if (mAutoclickIndicatorScheduler != null) {
                            mAutoclickIndicatorScheduler.cancel();
                            if (mAutoclickIndicatorView != null) {
                                mAutoclickIndicatorView.clearIndicator();
                            }
                        }
                        // Perform scroll action.
                        if (direction != DIRECTION_NONE) {
                            handleScroll(direction);
                        }
                    }
                }
            };

    public AutoclickController(Context context, int userId, AccessibilityTraceManager trace) {
+18 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -864,6 +865,23 @@ public class AutoclickControllerTest {
        assertThat(motionEventCaptor.downEvent).isNull();
    }

    @Test
    @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void scrollPanelController_directionalButtonsHideIndicator() {
        injectFakeMouseActionHoverMoveEvent();

        // Create a spy on the real object to verify method calls.
        AutoclickIndicatorView spyIndicatorView = spy(mController.mAutoclickIndicatorView);
        mController.mAutoclickIndicatorView = spyIndicatorView;

        // Simulate hover on direction button.
        mController.mScrollPanelController.onHoverButtonChange(
                AutoclickScrollPanel.DIRECTION_UP, true);

        // Verify clearIndicator was called.
        verify(spyIndicatorView).clearIndicator();
    }

    @Test
    @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void hoverOnAutoclickPanel_rightClickType_forceTriggerLeftClick() {