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

Commit d54e8e04 authored by Joshua Tsuji's avatar Joshua Tsuji Committed by Josh Tsuji
Browse files

Run end actions immediately if there are no children to animate.

This fixes several issues around dismissing the last bubble while in the expanded state, since end actions passed to collapseToStack were never run.

Test: atest SystemUITests
Fixes: 128603791
Fixes: 129359745
Change-Id: I6840c6b0f417c96f7927e96261c9d9436b13c426
parent 7cefe09e
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -202,13 +202,21 @@ public class PhysicsAnimationLayout extends FrameLayout {
            // add a multiple property end listener to the layout that will call the end action
            // provided to startAll() once all animations on the animated properties complete.
            return (endActions) -> {
                if (endActions != null) {
                    mLayout.setEndActionForMultipleProperties(
                            () -> {
                final Runnable runAllEndActions = () -> {
                    for (Runnable action : endActions) {
                        action.run();
                    }
                            },
                };

                // If there aren't any children to animate, just run the end actions.
                if (mLayout.getChildCount() == 0) {
                    runAllEndActions.run();
                    return;
                }

                if (endActions != null) {
                    mLayout.setEndActionForMultipleProperties(
                            runAllEndActions,
                            allAnimatedProperties.toArray(
                                    new DynamicAnimation.ViewProperty[0]));
                }
+13 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.os.SystemClock;
import android.testing.AndroidTestingRunner;
@@ -449,6 +450,18 @@ public class PhysicsAnimationLayoutTest extends PhysicsAnimationLayoutTestCase {
        Mockito.verify(allEnd, times(1)).run();
    }

    @Test
    public void testAnimationsForChildrenFromIndex_noChildren() {
        mLayout.setController(mTestableController);

        final Runnable after = Mockito.mock(Runnable.class);
        mTestableController
                .animationsForChildrenFromIndex(0, (index, animation) -> { })
                .startAll(after);

        verify(after, Mockito.times(1)).run();
    }

    /**
     * Animation controller with configuration methods whose return values can be set by individual
     * tests.