Merge "Mark actions unimportant for accessibility when obscured by RemoteInputView." into tm-qpr-dev

This commit is contained in:
Julia Tuttle
2022-10-07 16:53:46 +00:00
committed by Android (Google) Code Review
2 changed files with 76 additions and 0 deletions

View File

@@ -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

View File

@@ -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);
}
}