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

Commit e4f6802d authored by Julia Tuttle's avatar Julia Tuttle Committed by Automerger Merge Worker
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 am: eb35acbd

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20111501



Change-Id: I1fc3ae5f6f494348201eb8e1dc6793e444391d57
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 20255cb6 eb35acbd
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);
    }
}