Adds accessibility actions for magnification switch button to move layout position am: f142b5a368

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14781659

Change-Id: Ia5d234f282a7302cadfbf0fdef16309767eb98a1
This commit is contained in:
mincheli
2021-06-02 03:47:38 +00:00
committed by Automerger Merge Worker
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);