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:
@@ -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) -> {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user