From 95268ff6763ad5245bb798c9d2a6f5f835800b37 Mon Sep 17 00:00:00 2001 From: Candice Lo Date: Wed, 1 Mar 2023 06:35:34 +0000 Subject: [PATCH 1/2] Do not close the settings panel on tap 1. Fix the experience of tapping on the empty space in magnification settings panel and keep the panel open when tapping on the space without any elements on the panel. 2. Remove the rules for buttons set other than in onClickListener. The behaviors of buttons will always remain the same. Bug: 265362818 Test: manually - attach videos to the bug Change-Id: I78267c0bd31b7e6af05c06b0ac24962115ea7f35 --- .../WindowMagnificationSettings.java | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java index 15264e64a241f..5f153b139755e 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -215,9 +215,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest private boolean performA11yAction(View view, int action) { final Rect windowBounds = mWindowManager.getCurrentWindowMetrics().getBounds(); - if (action == AccessibilityAction.ACTION_CLICK.getId()) { - handleSingleTap(view); - } else if (action == R.id.accessibility_action_move_up) { + 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()); @@ -264,8 +262,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest } else if (id == R.id.magnifier_full_button) { hideSettingPanel(); toggleMagnificationMode(); - } else { - hideSettingPanel(); } } }; @@ -273,7 +269,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest @Override public boolean onSingleTap(View view) { mSingleTapDetected = true; - handleSingleTap(view); return true; } @@ -499,22 +494,6 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest } } - private void handleSingleTap(View view) { - int id = view.getId(); - if (id == R.id.magnifier_small_button) { - setMagnifierSize(MagnificationSize.SMALL); - } else if (id == R.id.magnifier_medium_button) { - setMagnifierSize(MagnificationSize.MEDIUM); - } else if (id == R.id.magnifier_large_button) { - setMagnifierSize(MagnificationSize.LARGE); - } else if (id == R.id.magnifier_full_button) { - hideSettingPanel(); - toggleMagnificationMode(); - } else { - hideSettingPanel(); - } - } - public void editMagnifierSizeMode(boolean enable) { setEditMagnifierSizeMode(enable); updateSelectedButton(MagnificationSize.NONE); From 77cd76695aada1abefd9c6949d08975d3d5147f0 Mon Sep 17 00:00:00 2001 From: Candice Lo Date: Thu, 2 Mar 2023 16:36:03 +0000 Subject: [PATCH 2/2] Fix focus and announcements for Magnification Settings 1. When opening the settings panel in Talkback, the focus will be on the panel. 2. Add content description for the magnification settings panel. 3. Fix the click action announced for the magnification window to be opening the settings panel. Bug: 241996711 Test: manually - attach videos to the bug Test: atest WindowMagnificationSettingsTest Change-Id: If787cf8b8ce270a5048c650d26905a6123f838ca --- .../res/layout/window_magnification_settings_view.xml | 4 +++- packages/SystemUI/res/values/strings.xml | 4 ++++ .../accessibility/WindowMagnificationController.java | 2 +- .../accessibility/WindowMagnificationSettings.java | 8 ++++++-- .../accessibility/WindowMagnificationSettingsTest.java | 7 +++++++ 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/res/layout/window_magnification_settings_view.xml b/packages/SystemUI/res/layout/window_magnification_settings_view.xml index 7dfe7c4c72be0..ae0f8f46599d9 100644 --- a/packages/SystemUI/res/layout/window_magnification_settings_view.xml +++ b/packages/SystemUI/res/layout/window_magnification_settings_view.xml @@ -21,7 +21,9 @@ android:layout_height="wrap_content" android:background="@drawable/accessibility_magnification_setting_view_bg" android:orientation="vertical" - android:padding="@dimen/magnification_setting_background_padding"> + android:padding="@dimen/magnification_setting_background_padding" + android:focusable="true" + android:contentDescription="@string/accessibility_magnification_settings_panel_description"> Magnify part of screen Switch + + Open magnification settings Drag corner to resize @@ -2360,6 +2362,8 @@ Bottom handle + + Magnification settings Magnifier size diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java index b111e1f72f1d8..d35c77c3b231f 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java @@ -1468,7 +1468,7 @@ class WindowMagnificationController implements View.OnTouchListener, SurfaceHold super.onInitializeAccessibilityNodeInfo(host, info); final AccessibilityAction clickAction = new AccessibilityAction( AccessibilityAction.ACTION_CLICK.getId(), mContext.getResources().getString( - R.string.magnification_mode_switch_click_label)); + R.string.magnification_open_settings_click_label)); 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 5f153b139755e..e1f3c6cc5c3b0 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java @@ -353,6 +353,10 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest } mWindowManager.addView(mSettingView, mParams); + if (resetPosition) { + // Request focus on the settings panel when position of the panel is reset. + mSettingView.requestFocus(); + } // Exclude magnification switch button from system gesture area. setSystemGestureExclusion(); @@ -380,8 +384,8 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest mSettingView = (LinearLayout) View.inflate(mContext, R.layout.window_magnification_settings_view, null); - mSettingView.setClickable(true); mSettingView.setFocusable(true); + mSettingView.setFocusableInTouchMode(true); mSettingView.setOnTouchListener(this::onTouch); mPanelView = mSettingView.findViewById(R.id.magnifier_panel_view); @@ -530,7 +534,7 @@ class WindowMagnificationSettings implements MagnificationGestureDetector.OnGest LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, - LayoutParams.FLAG_NOT_FOCUSABLE, + /* _flags= */ 0, PixelFormat.TRANSPARENT); params.gravity = Gravity.TOP | Gravity.START; params.accessibilityTitle = getAccessibilityWindowTitle(context); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java index 47c91911e52aa..52a70ee9cce2c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java @@ -201,6 +201,13 @@ public class WindowMagnificationSettingsTest extends SysuiTestCase { assertThat(magnifierMediumButton.isSelected()).isTrue(); } + @Test + public void showSettingPanel_focusOnThePanel() { + mWindowMagnificationSettings.showSettingPanel(); + + assertThat(mSettingView.isFocused()).isTrue(); + } + private T getInternalView(@IdRes int idRes) { T view = mSettingView.findViewById(idRes); assertNotNull(view);