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
This commit is contained in:
mincheli
2021-06-01 11:54:28 +08:00
committed by Minche Li
parent 9cc5e58c98
commit f142b5a368
2 changed files with 54 additions and 3 deletions

View File

@@ -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) -> {

View File

@@ -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);