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

Commit 22fa9757 authored by Selim Cinek's avatar Selim Cinek
Browse files

Only calling finishedwhen all the animations have finished

Previously we would finish way too early if any of the scrims
finished animation. Since some scrims almost never change, we
would have animations being terminated early.

Fixes: 141649119
Test: unlock with bypass, observe no lock icon change
Change-Id: I6aefd6a27ef315995d8e1ae62c27a5f33cc9e160
parent 9c743a22
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -754,6 +754,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
    }

    private void onFinished(Callback callback) {
        if (!hasReachedFinalState(mScrimBehind)
            || !hasReachedFinalState(mScrimInFront)
            || !hasReachedFinalState(mScrimForBubble)) {
            if (callback != null && callback != mCallback) {
                // Since we only notify the callback that we're finished once everything has
                // finished, we need to make sure that any changing callbacks are also invoked
                callback.onFinished();
            }
            return;
        }
        if (mWakeLockHeld) {
            mWakeLock.release(TAG);
            mWakeLockHeld = false;
@@ -773,7 +783,15 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
            mInFrontTint = Color.TRANSPARENT;
            mBehindTint = Color.TRANSPARENT;
            mBubbleTint = Color.TRANSPARENT;
            updateScrimColor(mScrimInFront, mInFrontAlpha, mInFrontTint);
            updateScrimColor(mScrimBehind, mBehindAlpha, mBehindTint);
            updateScrimColor(mScrimForBubble, mBubbleAlpha, mBubbleTint);
        }
    }

    private boolean hasReachedFinalState(ScrimView scrim) {
        return scrim.getViewAlpha() == getCurrentScrimAlpha(scrim)
                && scrim.getTint() == getCurrentScrimTint(scrim);
    }

    private boolean isAnimating(View scrim) {
+1 −0
Original line number Diff line number Diff line
@@ -431,6 +431,7 @@ public class ScrimControllerTest extends SysuiTestCase {
                TRANSPARENT /* behind */,
                TRANSPARENT /* bubble */);

        // Make sure at the very end of the animation, we're reset to transparent
        assertScrimTint(false /* front */,
                false /* behind */,
                false  /* bubble */);