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

Commit d0fe039a authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

AuthRipple should always animate lightReveal on auth

- AuthRipple animates light reveal even when the
device is going to sleep.
- If another light reveal effect has taken over, then
the auth ripple should immediately cancel its animation
so that subsequent authentications within that time aren't
taken over by a stale animator (and so the stale animator
isn't needlessly animating)
- Before setting the reveal effect to the circle effect,
immediately reset the revealAmount to 0 so we start with
a clean black screen rather than flashing before resetting.
- Add reveal amount to the trace (which will be an int value between
0 and 100, where 0 represents revealAmount=0 and 100 is revealAmount=1f)

Test: manually authenticate with rear FP when device is going to sleep +
repeat
Fixes: 228092241

Change-Id: Iaea613fd542404077dc77bad91e4717188015cb6
parent dd0a8fb6
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ class AuthRippleController @Inject constructor(
        val lightRevealScrim = centralSurfaces.lightRevealScrim
        if (statusBarStateController.isDozing || biometricUnlockController.isWakeAndUnlock) {
            circleReveal?.let {
                lightRevealScrim?.revealAmount = 0f
                lightRevealScrim?.revealEffect = it
                startLightRevealScrimOnKeyguardFadingAway = true
            }
@@ -168,7 +169,8 @@ class AuthRippleController @Inject constructor(
                    startDelay = keyguardStateController.keyguardFadingAwayDelay
                    addUpdateListener { animator ->
                        if (lightRevealScrim.revealEffect != circleReveal) {
                            // if something else took over the reveal, let's do nothing.
                            // if something else took over the reveal, let's cancel ourselves
                            cancel()
                            return@addUpdateListener
                        }
                        lightRevealScrim.revealAmount = animator.animatedValue as Float
+5 −2
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import android.graphics.PorterDuffColorFilter
import android.graphics.PorterDuffXfermode
import android.graphics.RadialGradient
import android.graphics.Shader
import android.os.Trace
import android.util.AttributeSet
import android.util.MathUtils.lerp
import android.view.View
@@ -222,6 +223,8 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context,

                revealEffect.setRevealAmountOnScrim(value, this)
                updateScrimOpaque()
                Trace.traceCounter(Trace.TRACE_TAG_APP, "light_reveal_amount",
                        (field * 100).toInt())
                invalidate()
            }
        }
@@ -355,8 +358,8 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context,
    }

    override fun onDraw(canvas: Canvas?) {
        if (canvas == null || revealGradientWidth <= 0 || revealGradientHeight <= 0
            || revealAmount == 0f) {
        if (canvas == null || revealGradientWidth <= 0 || revealGradientHeight <= 0 ||
            revealAmount == 0f) {
            if (revealAmount < 1f) {
                canvas?.drawColor(revealGradientEndColor)
            }
+1 −2
Original line number Diff line number Diff line
@@ -4404,8 +4404,7 @@ public class CentralSurfaces extends CoreStartable implements
                @Override
                public void onDozeAmountChanged(float linear, float eased) {
                    if (mFeatureFlags.isEnabled(Flags.LOCKSCREEN_ANIMATIONS)
                            && !(mLightRevealScrim.getRevealEffect() instanceof CircleReveal)
                            && !mBiometricUnlockController.isWakeAndUnlock()) {
                            && !(mLightRevealScrim.getRevealEffect() instanceof CircleReveal)) {
                        mLightRevealScrim.setRevealAmount(1f - linear);
                    }
                }
+7 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.CircleReveal
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.StatusBarStateControllerImpl
@@ -79,7 +80,9 @@ class UnlockedScreenOffAnimationController @Inject constructor(
        duration = LIGHT_REVEAL_ANIMATION_DURATION
        interpolator = Interpolators.LINEAR
        addUpdateListener {
            if (lightRevealScrim.revealEffect !is CircleReveal) {
                lightRevealScrim.revealAmount = it.animatedValue as Float
            }
            if (lightRevealScrim.isScrimAlmostOccludes &&
                    interactionJankMonitor.isInstrumenting(CUJ_SCREEN_OFF)) {
                // ends the instrument when the scrim almost occludes the screen.
@@ -89,9 +92,9 @@ class UnlockedScreenOffAnimationController @Inject constructor(
        }
        addListener(object : AnimatorListenerAdapter() {
            override fun onAnimationCancel(animation: Animator?) {
                if (lightRevealScrim.revealEffect !is CircleReveal) {
                    lightRevealScrim.revealAmount = 1f
                lightRevealAnimationPlaying = false
                interactionJankMonitor.cancel(CUJ_SCREEN_OFF)
                }
            }

            override fun onAnimationEnd(animation: Animator?) {