Adds accessibility actions for magnification switch button to move layout position am: f142b5a368 am: e1a613adb9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14781659 Change-Id: Id17d8fa2afc502e25d529e76dda2e93b1a607ff1
This commit is contained in:
@@ -108,16 +108,41 @@ class MagnificationModeSwitch implements MagnificationGestureDetector.OnGestureL
|
|||||||
R.string.magnification_mode_switch_click_label));
|
R.string.magnification_mode_switch_click_label));
|
||||||
info.addAction(clickAction);
|
info.addAction(clickAction);
|
||||||
info.setClickable(true);
|
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
|
@Override
|
||||||
public boolean performAccessibilityAction(View host, int action, Bundle args) {
|
public boolean performAccessibilityAction(View host, int action, Bundle args) {
|
||||||
if (action == AccessibilityAction.ACTION_CLICK.getId()) {
|
if (performA11yAction(action)) {
|
||||||
handleSingleTap();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.performAccessibilityAction(host, action, args);
|
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;
|
mWindowInsetChangeRunnable = this::onWindowInsetChanged;
|
||||||
mImageView.setOnApplyWindowInsetsListener((v, insets) -> {
|
mImageView.setOnApplyWindowInsetsListener((v, insets) -> {
|
||||||
|
|||||||
@@ -394,10 +394,26 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
|
|||||||
hasItems(new AccessibilityNodeInfo.AccessibilityAction(
|
hasItems(new AccessibilityNodeInfo.AccessibilityAction(
|
||||||
ACTION_CLICK.getId(), mContext.getResources().getString(
|
ACTION_CLICK.getId(), mContext.getResources().getString(
|
||||||
R.string.magnification_mode_switch_click_label))));
|
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
|
@Test
|
||||||
public void performA11yActions_showWindowModeButton_verifyTapAction() {
|
public void performClickA11yActions_showWindowModeButton_verifyTapAction() {
|
||||||
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
|
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
|
||||||
resetAndStubMockImageViewAndAnimator();
|
resetAndStubMockImageViewAndAnimator();
|
||||||
|
|
||||||
@@ -407,6 +423,16 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
|
|||||||
verifyTapAction(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
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
|
@Test
|
||||||
public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() {
|
public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() {
|
||||||
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
|
||||||
|
|||||||
Reference in New Issue
Block a user