From 77cd76695aada1abefd9c6949d08975d3d5147f0 Mon Sep 17 00:00:00 2001 From: Candice Lo Date: Thu, 2 Mar 2023 16:36:03 +0000 Subject: [PATCH] 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);