diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java index 99cf095ef61d8..2e6c9e48d61a5 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java @@ -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) -> { diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java index ab5bdf4835da8..49604ff498383 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java @@ -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);