diff options
| author | 2022-10-07 16:53:46 +0000 | |
|---|---|---|
| committer | 2022-10-07 16:53:46 +0000 | |
| commit | eb35acbd95be0dea07933ee24e99664764da4a99 (patch) | |
| tree | dc7492e3993034309f682637b7e6f2622287b390 | |
| parent | deb157936a413afbd4caddf2ee32b0b8aa112d0b (diff) | |
| parent | 152fc131c53fbf62f84612f5aafc6aace58f57ad (diff) | |
Merge "Mark actions unimportant for accessibility when obscured by RemoteInputView." into tm-qpr-dev
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); + } } |