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

Commit f142b5a3 authored by mincheli's avatar mincheli Committed by Minche Li
Browse files

Adds accessibility actions for magnification switch button to move layout position

To fulfill the need of GAR, switch access users may need the support of
accessibility actions to move the switch button position.

Bug: 189096761
Test: atest MagnificationModeSwitchTest
Change-Id: Ia2b63c439f1b0e18cddcd0444dc3fa5971795d8c
parent 9cc5e58c
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -108,16 +108,41 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
                        R.string.magnification_mode_switch_click_label));
                info.addAction(clickAction);
                info.setClickable(true);
                info.addAction(new AccessibilityAction(R.id.accessibility_action_move_up,
                        mContext.getString(R.string.accessibility_control_move_up)));
                info.addAction(new AccessibilityAction(R.id.accessibility_action_move_down,
                        mContext.getString(R.string.accessibility_control_move_down)));
                info.addAction(new AccessibilityAction(R.id.accessibility_action_move_left,
                        mContext.getString(R.string.accessibility_control_move_left)));
                info.addAction(new AccessibilityAction(R.id.accessibility_action_move_right,
                        mContext.getString(R.string.accessibility_control_move_right)));
            }

            @Override
            public boolean performAccessibilityAction(View host, int action, Bundle args) {
                if (action == AccessibilityAction.ACTION_CLICK.getId()) {
                    handleSingleTap();
                if (performA11yAction(action)) {
                    return true;
                }
                return super.performAccessibilityAction(host, action, args);
            }

            private boolean performA11yAction(int action) {
                final Rect windowBounds = mWindowManager.getCurrentWindowMetrics().getBounds();
                if (action == AccessibilityAction.ACTION_CLICK.getId()) {
                    handleSingleTap();
                } else if (action == R.id.accessibility_action_move_up) {
                    moveButton(0, -windowBounds.height());
                } else if (action == R.id.accessibility_action_move_down) {
                    moveButton(0, windowBounds.height());
                } else if (action == R.id.accessibility_action_move_left) {
                    moveButton(-windowBounds.width(), 0);
                } else if (action == R.id.accessibility_action_move_right) {
                    moveButton(windowBounds.width(), 0);
                } else {
                    return false;
                }
                return true;
            }
        });
        mWindowInsetChangeRunnable = this::onWindowInsetChanged;
        mImageView.setOnApplyWindowInsetsListener((v, insets) -> {
+27 −1
Original line number Diff line number Diff line
@@ -394,10 +394,26 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
                hasItems(new AccessibilityNodeInfo.AccessibilityAction(
                        ACTION_CLICK.getId(), mContext.getResources().getString(
                        R.string.magnification_mode_switch_click_label))));
        assertThat(nodeInfo.getActionList(),
                hasItems(new AccessibilityNodeInfo.AccessibilityAction(
                        R.id.accessibility_action_move_up, mContext.getResources().getString(
                        R.string.accessibility_control_move_up))));
        assertThat(nodeInfo.getActionList(),
                hasItems(new AccessibilityNodeInfo.AccessibilityAction(
                        R.id.accessibility_action_move_down, mContext.getResources().getString(
                        R.string.accessibility_control_move_down))));
        assertThat(nodeInfo.getActionList(),
                hasItems(new AccessibilityNodeInfo.AccessibilityAction(
                        R.id.accessibility_action_move_left, mContext.getResources().getString(
                        R.string.accessibility_control_move_left))));
        assertThat(nodeInfo.getActionList(),
                hasItems(new AccessibilityNodeInfo.AccessibilityAction(
                        R.id.accessibility_action_move_right, mContext.getResources().getString(
                        R.string.accessibility_control_move_right))));
    }

    @Test
    public void performA11yActions_showWindowModeButton_verifyTapAction() {
    public void performClickA11yActions_showWindowModeButton_verifyTapAction() {
        mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
        resetAndStubMockImageViewAndAnimator();

@@ -407,6 +423,16 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
        verifyTapAction(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
    }

    @Test
    public void performMoveLeftA11yAction_showButtonAtRightEdge_moveToLeftEdge() {
        mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);

        mSpyImageView.performAccessibilityAction(
                R.id.accessibility_action_move_left, null);

        assertLayoutPosition(/* toLeftScreenEdge= */true);
    }

    @Test
    public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() {
        mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);