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

Commit 0671bf43 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Ensure light reveal scrim is fully revealed once we're unlocked.

We've had some difficult to reproduce bugs where the
lightreveal remains visible in the shade while
unlocked. These are likely related to bugs in the
keyguard state code, which we intend to refactor in
U.

In the meantime, the scrim should never be anything
but fully revealed once the keyguard going away
transition ends.

Fixes: 229778554
Test: manually force all lightreveal animations to end at 0.5f, then unlock
Test: can't add test to centralsurfacestest because start() is not called
Change-Id: I6bd65738635a2f966227014a4920f8e8367b91e6
parent 9750b0ca
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ class AuthRippleController @Inject constructor(

    @VisibleForTesting
    internal var startLightRevealScrimOnKeyguardFadingAway = false
    var lightRevealScrimAnimator: ValueAnimator? = null
    var fingerprintSensorLocation: PointF? = null
    private var faceSensorLocation: PointF? = null
    private var circleReveal: LightRevealEffect? = null
@@ -163,7 +164,8 @@ class AuthRippleController @Inject constructor(
        if (keyguardStateController.isKeyguardFadingAway) {
            val lightRevealScrim = centralSurfaces.lightRevealScrim
            if (startLightRevealScrimOnKeyguardFadingAway && lightRevealScrim != null) {
                ValueAnimator.ofFloat(.1f, 1f).apply {
                lightRevealScrimAnimator?.cancel()
                lightRevealScrimAnimator = ValueAnimator.ofFloat(.1f, 1f).apply {
                    interpolator = Interpolators.LINEAR_OUT_SLOW_IN
                    duration = RIPPLE_ANIMATION_DURATION
                    startDelay = keyguardStateController.keyguardFadingAwayDelay
@@ -183,6 +185,8 @@ class AuthRippleController @Inject constructor(
                            if (lightRevealScrim.revealEffect == circleReveal) {
                                lightRevealScrim.revealEffect = LiftReveal
                            }

                            lightRevealScrimAnimator = null
                        }
                    })
                    start()
@@ -192,6 +196,13 @@ class AuthRippleController @Inject constructor(
        }
    }

    /**
     * Whether we're animating the light reveal scrim from a call to [onKeyguardFadingAwayChanged].
     */
    fun isAnimatingLightRevealScrim(): Boolean {
        return lightRevealScrimAnimator?.isRunning ?: false
    }

    override fun onStartedGoingToSleep() {
        // reset the light reveal start in case we were pending an unlock
        startLightRevealScrimOnKeyguardFadingAway = false
+17 −0
Original line number Diff line number Diff line
@@ -1022,6 +1022,23 @@ public class CentralSurfacesImpl extends CoreStartable implements
            public void onUnlockedChanged() {
                logStateToEventlog();
            }

            @Override
            public void onKeyguardGoingAwayChanged() {
                // The light reveal scrim should always be fully revealed by the time the keyguard
                // is done going away. Double check that this is true.
                if (!mKeyguardStateController.isKeyguardGoingAway()) {
                    if (mLightRevealScrim.getRevealAmount() != 1f) {
                        Log.e(TAG, "Keyguard is done going away, but someone left the light reveal "
                                + "scrim at reveal amount: " + mLightRevealScrim.getRevealAmount());
                    }

                    // If the auth ripple is still playing, let it finish.
                    if (!mAuthRippleController.isAnimatingLightRevealScrim()) {
                        mLightRevealScrim.setRevealAmount(1f);
                    }
                }
            }
        });
        startKeyguard();