Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb35acbd authored by Julia Tuttle's avatar Julia Tuttle Committed by Android (Google) Code Review
Browse files

Merge "Mark actions unimportant for accessibility when obscured by...

Merge "Mark actions unimportant for accessibility when obscured by RemoteInputView." into tm-qpr-dev
parents deb15793 152fc131
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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
+57 −0
Original line number Diff line number Diff line
@@ -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);
    }
}