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
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationModeSwitch.java
index 99cf095..2e6c9e4 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 @@
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 ab5bdf4..49604ff 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 @@
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();
@@ -408,6 +424,16 @@
}
@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);
assertShowFadingAnimation(FADE_OUT_ALPHA);