Tapping settings button for opening/closing panel

Previously, the drag corner in window magnifier is only used for opening
the settings panel. We add the logic of closing the settings panel when
tapping on the drag corner again if the panel is opened and add the
corresponding accessibility action label for closing magnification
settings.

Bug: 280523938
Test: atest WindowMagnificationControllerTest WindowMagnificationTest MagnificationSettingsControllerTest windowMagnificationSettingsTest
Test: manually - attach videos to the bug
Change-Id: I17b7afa130a4e97eb743b7eec980e98f1718b0b4
This commit is contained in:
Candice Lo
2023-05-16 09:26:04 +00:00
parent 94862db161
commit e22f8e2b14
7 changed files with 34 additions and 13 deletions

View File

@@ -2391,6 +2391,8 @@
<string name="magnification_mode_switch_state_window">Magnify part of screen</string>
<!-- Click action label for magnification settings panel. [CHAR LIMIT=NONE] -->
<string name="magnification_open_settings_click_label">Open magnification settings</string>
<!-- Click action label for magnification settings panel. [CHAR LIMIT=NONE] -->
<string name="magnification_close_settings_click_label">Close magnification settings</string>
<!-- Label of the corner of a rectangle that you can tap and drag to resize the magnification area. [CHAR LIMIT=NONE] -->
<string name="magnification_drag_corner_to_resize">Drag corner to resize</string>

View File

@@ -87,14 +87,15 @@ public class MagnificationSettingsController implements ComponentCallbacks {
}
/**
* Shows magnification settings panel {@link WindowMagnificationSettings}.
* Toggles the visibility of magnification settings panel {@link WindowMagnificationSettings}.
* We show the panel if it is not visible. Otherwise, hide the panel.
*/
void showMagnificationSettings() {
void toggleSettingsPanelVisibility() {
if (!mWindowMagnificationSettings.isSettingPanelShowing()) {
onConfigurationChanged(mContext.getResources().getConfiguration());
mContext.registerComponentCallbacks(this);
}
mWindowMagnificationSettings.showSettingPanel();
mWindowMagnificationSettings.toggleSettingsPanelVisibility();
}
void closeMagnificationSettings() {

View File

@@ -171,7 +171,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
mModeSwitchesController.setClickListenerDelegate(
displayId -> mHandler.post(() -> {
showMagnificationSettingsPanel(displayId);
toggleSettingsPanelVisibility(displayId);
}));
}
@@ -254,11 +254,11 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
}
@MainThread
void showMagnificationSettingsPanel(int displayId) {
void toggleSettingsPanelVisibility(int displayId) {
final MagnificationSettingsController magnificationSettingsController =
mMagnificationSettingsSupplier.get(displayId);
if (magnificationSettingsController != null) {
magnificationSettingsController.showMagnificationSettings();
magnificationSettingsController.toggleSettingsPanelVisibility();
}
}
@@ -335,7 +335,7 @@ public class WindowMagnification implements CoreStartable, CommandQueue.Callback
@Override
public void onClickSettingsButton(int displayId) {
mHandler.post(() -> {
showMagnificationSettingsPanel(displayId);
toggleSettingsPanelVisibility(displayId);
});
}
};

View File

@@ -221,6 +221,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
private boolean mAllowDiagonalScrolling = false;
private boolean mEditSizeEnable = false;
private boolean mSettingsPanelVisibility = false;
@Nullable
private final MirrorWindowControl mMirrorWindowControl;
@@ -1399,6 +1400,8 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
return;
}
mSettingsPanelVisibility = settingsPanelIsShown;
mDragView.setBackground(mContext.getResources().getDrawable(settingsPanelIsShown
? R.drawable.accessibility_window_magnification_drag_handle_background_change
: R.drawable.accessibility_window_magnification_drag_handle_background));
@@ -1439,12 +1442,19 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold
private class MirrorWindowA11yDelegate extends View.AccessibilityDelegate {
private CharSequence getClickAccessibilityActionLabel() {
return mSettingsPanelVisibility
? mContext.getResources().getString(
R.string.magnification_close_settings_click_label)
: mContext.getResources().getString(
R.string.magnification_open_settings_click_label);
}
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(host, info);
final AccessibilityAction clickAction = new AccessibilityAction(
AccessibilityAction.ACTION_CLICK.getId(), mContext.getResources().getString(
R.string.magnification_open_settings_click_label));
AccessibilityAction.ACTION_CLICK.getId(), getClickAccessibilityActionLabel());
info.addAction(clickAction);
info.setClickable(true);
info.addAction(

View File

@@ -311,6 +311,14 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest
mCallback.onSettingsPanelVisibilityChanged(/* shown= */ false);
}
public void toggleSettingsPanelVisibility() {
if (!mIsVisible) {
showSettingPanel();
} else {
hideSettingPanel();
}
}
public void showSettingPanel() {
showSettingPanel(true);
}

View File

@@ -73,9 +73,9 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase {
@Test
public void testShowSettingsPanel() {
mMagnificationSettingsController.showMagnificationSettings();
mMagnificationSettingsController.toggleSettingsPanelVisibility();
verify(mWindowMagnificationSettings).showSettingPanel();
verify(mWindowMagnificationSettings).toggleSettingsPanelVisibility();
}
@Test

View File

@@ -110,7 +110,7 @@ public class WindowMagnificationTest extends SysuiTestCase {
mWindowMagnification.mMagnificationSettingsControllerCallback
.onSettingsPanelVisibilityChanged(TEST_DISPLAY, /* shown= */ true);
return null;
}).when(mMagnificationSettingsController).showMagnificationSettings();
}).when(mMagnificationSettingsController).toggleSettingsPanelVisibility();
doAnswer(invocation -> {
mWindowMagnification.mMagnificationSettingsControllerCallback
.onSettingsPanelVisibilityChanged(TEST_DISPLAY, /* shown= */ false);
@@ -198,7 +198,7 @@ public class WindowMagnificationTest extends SysuiTestCase {
mWindowMagnification.mWindowMagnifierCallback.onClickSettingsButton(TEST_DISPLAY);
waitForIdleSync();
verify(mMagnificationSettingsController).showMagnificationSettings();
verify(mMagnificationSettingsController).toggleSettingsPanelVisibility();
verify(mA11yLogger).log(
eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED));
}