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

Commit 8461cd62 authored by Julia Reynolds's avatar Julia Reynolds Committed by Automerger Merge Worker
Browse files

Merge "Reset the clearAllInProgress flag when the shade is collapsed" into...

Merge "Reset the clearAllInProgress flag when the shade is collapsed" into udc-dev am: ee9049be am: ebb8ce22 am: 7f882a5e

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



Change-Id: I067861b21254d03eaba03bd748f5f49829b4681c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents a00110d8 7f882a5e
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -4060,6 +4060,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
                if (!mIsExpansionChanging) {
                    cancelActiveSwipe();
                }
                finalizeClearAllAnimation();
            }
            updateNotificationAnimationStates();
            updateChronometers();
@@ -4155,19 +4156,29 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        runAnimationFinishedRunnables();
        clearTransient();
        clearHeadsUpDisappearRunning();
        finalizeClearAllAnimation();
    }

    private void finalizeClearAllAnimation() {
        if (mAmbientState.isClearAllInProgress()) {
            setClearAllInProgress(false);
            if (mShadeNeedsToClose) {
                mShadeNeedsToClose = false;
                if (mIsExpanded) {
                    collapseShadeDelayed();
                }
            }
        }
    }

    private void collapseShadeDelayed() {
        postDelayed(
                () -> {
                            mShadeController.animateCollapseShade(CommandQueue.FLAG_EXCLUDE_NONE);
                    mShadeController.animateCollapseShade(
                            CommandQueue.FLAG_EXCLUDE_NONE);
                },
                DELAY_BEFORE_SHADE_CLOSE /* delayMillis */);
    }
        }
    }

    private void clearHeadsUpDisappearRunning() {
        for (int i = 0; i < getChildCount(); i++) {
@@ -4516,6 +4527,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        mFooterView.setFooterLabelVisible(mHasFilteredOutSeenNotifications);
    }

    @VisibleForTesting
    public void setClearAllInProgress(boolean clearAllInProgress) {
        mClearAllInProgress = clearAllInProgress;
        mAmbientState.setClearAllInProgress(clearAllInProgress);
@@ -5132,7 +5144,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
        mHeadsUpAppearanceController = headsUpAppearanceController;
    }

    private boolean isVisible(View child) {
    @VisibleForTesting
    public boolean isVisible(View child) {
        boolean hasClipBounds = child.getClipBounds(mTmpRect);
        return child.getVisibility() == View.VISIBLE
                && (!hasClipBounds || mTmpRect.height() > 0);
+61 −4
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -575,10 +576,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
        mStackScroller.inflateFooterView();

        // add notification
        ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
        NotificationEntry entry = mock(NotificationEntry.class);
        when(row.getEntry()).thenReturn(entry);
        when(entry.isClearable()).thenReturn(true);
        ExpandableNotificationRow row = createClearableRow();
        mStackScroller.addContainerView(row);

        mStackScroller.onUpdateRowStates();
@@ -647,6 +645,50 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
        assertEquals(ROWS_GENTLE, selected[0]);
    }

    @Test
    public void testClearNotifications_clearAllInProgress() {
        ExpandableNotificationRow row = createClearableRow();
        when(row.getEntry().hasFinishedInitialization()).thenReturn(true);
        doReturn(true).when(mStackScroller).isVisible(row);
        mStackScroller.addContainerView(row);

        mStackScroller.clearNotifications(ROWS_ALL, false);

        assertClearAllInProgress(true);
        verify(mNotificationRoundnessManager).setClearAllInProgress(true);
    }

    @Test
    public void testOnChildAnimationFinished_resetsClearAllInProgress() {
        mStackScroller.setClearAllInProgress(true);

        mStackScroller.onChildAnimationFinished();

        assertClearAllInProgress(false);
        verify(mNotificationRoundnessManager).setClearAllInProgress(false);
    }

    @Test
    public void testShadeCollapsed_resetsClearAllInProgress() {
        mStackScroller.setClearAllInProgress(true);

        mStackScroller.setIsExpanded(false);

        assertClearAllInProgress(false);
        verify(mNotificationRoundnessManager).setClearAllInProgress(false);
    }

    @Test
    public void testShadeExpanded_doesntChangeClearAllInProgress() {
        mStackScroller.setClearAllInProgress(true);
        clearInvocations(mNotificationRoundnessManager);

        mStackScroller.setIsExpanded(true);

        assertClearAllInProgress(true);
        verify(mNotificationRoundnessManager, never()).setClearAllInProgress(anyBoolean());
    }

    @Test
    public void testAddNotificationUpdatesSpeedBumpIndex() {
        // initial state calculated == 0
@@ -896,6 +938,21 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
        mStackScroller.setStatusBarState(state);
    }

    private ExpandableNotificationRow createClearableRow() {
        ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
        NotificationEntry entry = mock(NotificationEntry.class);
        when(row.canViewBeCleared()).thenReturn(true);
        when(row.getEntry()).thenReturn(entry);
        when(entry.isClearable()).thenReturn(true);

        return row;
    }

    private void assertClearAllInProgress(boolean expected) {
        assertEquals(expected, mStackScroller.getClearAllInProgress());
        assertEquals(expected, mAmbientState.isClearAllInProgress());
    }

    private static void mockBoundsOnScreen(View view, Rect bounds) {
        doAnswer(invocation -> {
            Rect out = invocation.getArgument(0);