summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Julia Tuttle <juliatuttle@google.com> 2022-10-07 16:53:46 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-10-07 16:53:46 +0000
commiteb35acbd95be0dea07933ee24e99664764da4a99 (patch)
treedc7492e3993034309f682637b7e6f2622287b390
parentdeb157936a413afbd4caddf2ee32b0b8aa112d0b (diff)
parent152fc131c53fbf62f84612f5aafc6aace58f57ad (diff)
Merge "Mark actions unimportant for accessibility when obscured by RemoteInputView." into tm-qpr-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java57
2 files changed, 76 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index df81c0ed3a61..8de036542c8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -1986,6 +1986,25 @@ public class NotificationContentView extends FrameLayout implements Notification
public void setRemoteInputVisible(boolean remoteInputVisible) {
mRemoteInputVisible = remoteInputVisible;
setClipChildren(!remoteInputVisible);
+ setActionsImportanceForAccessibility(
+ remoteInputVisible ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+ : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+ }
+
+ private void setActionsImportanceForAccessibility(int mode) {
+ if (mExpandedChild != null) {
+ setActionsImportanceForAccessibility(mode, mExpandedChild);
+ }
+ if (mHeadsUpChild != null) {
+ setActionsImportanceForAccessibility(mode, mHeadsUpChild);
+ }
+ }
+
+ private void setActionsImportanceForAccessibility(int mode, View child) {
+ View actionsCandidate = child.findViewById(com.android.internal.R.id.actions);
+ if (actionsCandidate != null) {
+ actionsCandidate.setImportantForAccessibility(mode);
+ }
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
index 682ff1fc8c52..81b8e98029ce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationContentViewTest.java
@@ -32,6 +32,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.R;
+import com.android.internal.widget.NotificationActionListLayout;
import com.android.internal.widget.NotificationExpandButton;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.media.dialog.MediaOutputDialogFactory;
@@ -142,4 +143,60 @@ public class NotificationContentViewTest extends SysuiTestCase {
verify(mockExpandedEB, times(1)).requestAccessibilityFocus();
verify(mockHeadsUpEB, times(0)).requestAccessibilityFocus();
}
+
+ @Test
+ @UiThreadTest
+ public void testRemoteInputVisibleSetsActionsUnimportantHideDescendantsForAccessibility() {
+ View mockContracted = mock(NotificationHeaderView.class);
+
+ View mockExpandedActions = mock(NotificationActionListLayout.class);
+ View mockExpanded = mock(NotificationHeaderView.class);
+ when(mockExpanded.findViewById(com.android.internal.R.id.actions)).thenReturn(
+ mockExpandedActions);
+
+ View mockHeadsUpActions = mock(NotificationActionListLayout.class);
+ View mockHeadsUp = mock(NotificationHeaderView.class);
+ when(mockHeadsUp.findViewById(com.android.internal.R.id.actions)).thenReturn(
+ mockHeadsUpActions);
+
+ mView.setContractedChild(mockContracted);
+ mView.setExpandedChild(mockExpanded);
+ mView.setHeadsUpChild(mockHeadsUp);
+
+ mView.setRemoteInputVisible(true);
+
+ verify(mockContracted, times(0)).findViewById(0);
+ verify(mockExpandedActions, times(1)).setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+ verify(mockHeadsUpActions, times(1)).setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+ }
+
+ @Test
+ @UiThreadTest
+ public void testRemoteInputInvisibleSetsActionsAutoImportantForAccessibility() {
+ View mockContracted = mock(NotificationHeaderView.class);
+
+ View mockExpandedActions = mock(NotificationActionListLayout.class);
+ View mockExpanded = mock(NotificationHeaderView.class);
+ when(mockExpanded.findViewById(com.android.internal.R.id.actions)).thenReturn(
+ mockExpandedActions);
+
+ View mockHeadsUpActions = mock(NotificationActionListLayout.class);
+ View mockHeadsUp = mock(NotificationHeaderView.class);
+ when(mockHeadsUp.findViewById(com.android.internal.R.id.actions)).thenReturn(
+ mockHeadsUpActions);
+
+ mView.setContractedChild(mockContracted);
+ mView.setExpandedChild(mockExpanded);
+ mView.setHeadsUpChild(mockHeadsUp);
+
+ mView.setRemoteInputVisible(false);
+
+ verify(mockContracted, times(0)).findViewById(0);
+ verify(mockExpandedActions, times(1)).setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+ verify(mockHeadsUpActions, times(1)).setImportantForAccessibility(
+ View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+ }
}