From e22f8e2b14d1ff46685728a8329e1e6873063fe6 Mon Sep 17 00:00:00 2001 From: Candice Lo Date: Tue, 16 May 2023 09:26:04 +0000 Subject: [PATCH] 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 --- packages/SystemUI/res/values/strings.xml | 2 ++ .../MagnificationSettingsController.java | 7 ++++--- .../accessibility/WindowMagnification.java | 8 ++++---- .../WindowMagnificationController.java | 14 ++++++++++++-- .../accessibility/WindowMagnificationSettings.java | 8 ++++++++ .../MagnificationSettingsControllerTest.java | 4 ++-- .../accessibility/WindowMagnificationTest.java | 4 ++-- 7 files changed, 34 insertions(+), 13 deletions(-) diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 5795e4facad42..ecb819ea31105 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2391,6 +2391,8 @@ Magnify part of screen Open magnification settings + + Close magnification settings Drag corner to resize diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java index c3bb423e5e4e4..fd3c158898227 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java @@ -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() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java index e2b85fa0ac00c..2a14dc894d436 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java @@ -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); }); } }; diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index a67f706777d9a..7c765889a381d 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -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( diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 3b1d695e3dad3..d0ff9f82db927 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -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); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java index 665246bd7f7dc..62a176c94d677 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationSettingsControllerTest.java @@ -73,9 +73,9 @@ public class MagnificationSettingsControllerTest extends SysuiTestCase { @Test public void testShowSettingsPanel() { - mMagnificationSettingsController.showMagnificationSettings(); + mMagnificationSettingsController.toggleSettingsPanelVisibility(); - verify(mWindowMagnificationSettings).showSettingPanel(); + verify(mWindowMagnificationSettings).toggleSettingsPanelVisibility(); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java index 38ecec0b4602f..db580742a68f6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java @@ -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)); }