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

Commit ddc1437c authored by Matt Pietal's avatar Matt Pietal
Browse files

[DO NOT MERGE] Remove MODE_WAKE_AND_UNLOCK_PULSING from stopDozing

A race condition exists when unlocking with UDFPS, or when unlocking
from a pulse state, that leaves SystemUI believing it is still in a
doze state even after unlocking. Because of this, the blur never
transitions and instead stuck in the doze state, which then causes
SystemUI to retain focus and grab all touches over the launcher.

This code path should no longer be relevant. Updated unlock animations
now handle all the keyguard elements without the need for this
dedicated path.

Furthermore, cleanup unused paths in
NotifcationShadeDepthController. The animateTo() calls accepted an
optional view which was never used.

Test: manual - Use UDFPS to unlock while dozing with AOD, without AOD,
and when pulsing from a notification
Test: atest NotificationShadeDepthControllerTest
CentralSurfacesImplTest DozeServiceHostTest
Fixes: 242415456

Change-Id: Ide66ab84eda91d8938a48014a91cbe3f12f2bf26
parent 162d9c0a
Loading
Loading
Loading
Loading
+5 −15
Original line number Diff line number Diff line
@@ -81,7 +81,6 @@ class NotificationShadeDepthController @Inject constructor(
    }

    lateinit var root: View
    private var blurRoot: View? = null
    private var keyguardAnimator: Animator? = null
    private var notificationAnimator: Animator? = null
    private var updateScheduled: Boolean = false
@@ -235,7 +234,7 @@ class NotificationShadeDepthController @Inject constructor(

        val opaque = scrimsVisible && !blursDisabledForAppLaunch
        Trace.traceCounter(Trace.TRACE_TAG_APP, "shade_blur_radius", blur)
        blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur, opaque)
        blurUtils.applyBlur(root.viewRootImpl, blur, opaque)
        lastAppliedBlur = blur
        wallpaperController.setNotificationShadeZoom(zoomOut)
        listeners.forEach {
@@ -271,7 +270,6 @@ class NotificationShadeDepthController @Inject constructor(
                    override fun onAnimationEnd(animation: Animator?) {
                        keyguardAnimator = null
                        wakeAndUnlockBlurRadius = 0f
                        scheduleUpdate()
                    }
                })
                start()
@@ -302,7 +300,6 @@ class NotificationShadeDepthController @Inject constructor(

        override fun onDozeAmountChanged(linear: Float, eased: Float) {
            wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(eased)
            scheduleUpdate()
        }
    }

@@ -439,12 +436,11 @@ class NotificationShadeDepthController @Inject constructor(
        shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized).toInt())
    }

    private fun scheduleUpdate(viewToBlur: View? = null) {
    private fun scheduleUpdate() {
        if (updateScheduled) {
            return
        }
        updateScheduled = true
        blurRoot = viewToBlur
        choreographer.postFrameCallback(updateBlurCallback)
    }

@@ -495,16 +491,11 @@ class NotificationShadeDepthController @Inject constructor(
         */
        private var pendingRadius = -1

        /**
         * View on {@link Surface} that wants depth.
         */
        private var view: View? = null

        private var springAnimation = SpringAnimation(this, object :
                FloatPropertyCompat<DepthAnimation>("blurRadius") {
            override fun setValue(rect: DepthAnimation?, value: Float) {
                radius = value
                scheduleUpdate(view)
                scheduleUpdate()
            }

            override fun getValue(rect: DepthAnimation?): Float {
@@ -519,11 +510,10 @@ class NotificationShadeDepthController @Inject constructor(
            springAnimation.addEndListener { _, _, _, _ -> pendingRadius = -1 }
        }

        fun animateTo(newRadius: Int, viewToBlur: View? = null) {
            if (pendingRadius == newRadius && view == viewToBlur) {
        fun animateTo(newRadius: Int) {
            if (pendingRadius == newRadius) {
                return
            }
            view = viewToBlur
            pendingRadius = newRadius
            springAnimation.animateToFinalPosition(newRadius.toFloat())
        }
+0 −2
Original line number Diff line number Diff line
@@ -390,8 +390,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn
    void fadeKeyguardAfterLaunchTransition(Runnable beforeFading,
            Runnable endRunnable, Runnable cancelRunnable);

    void fadeKeyguardWhilePulsing();

    void animateKeyguardUnoccluding();

    void startLaunchTransitionTimeout();
+0 −13
Original line number Diff line number Diff line
@@ -3018,19 +3018,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
        mLaunchTransitionCancelRunnable = null;
    }

    /**
     * Fades the content of the Keyguard while we are dozing and makes it invisible when finished
     * fading.
     */
    @Override
    public void fadeKeyguardWhilePulsing() {
        mNotificationPanelViewController.fadeOut(0, FADE_KEYGUARD_DURATION_PULSING,
                ()-> {
                hideKeyguard();
                mStatusBarKeyguardViewManager.onKeyguardFadedAway();
            }).start();
    }

    /**
     * Plays the animation when an activity that was occluding Keyguard goes away.
     */
+2 −6
Original line number Diff line number Diff line
@@ -209,12 +209,8 @@ public final class DozeServiceHost implements DozeHost {
    void updateDozing() {
        Assert.isMainThread();

        // When in wake-and-unlock while pulsing, keep dozing state until fully unlocked.
        boolean
                dozing =
                mDozingRequested && mStatusBarStateController.getState() == StatusBarState.KEYGUARD
                        || mBiometricUnlockControllerLazy.get().getMode()
                        == BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING;
        boolean dozing =
                mDozingRequested && mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
        // When in wake-and-unlock we may not have received a change to StatusBarState
        // but we still should not be dozing, manually set to false.
        if (mBiometricUnlockControllerLazy.get().getMode()
+13 −19
Original line number Diff line number Diff line
@@ -837,15 +837,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            });
        } else {
            executeAfterKeyguardGoneAction();
            boolean wakeUnlockPulsing =
                    mBiometricUnlockController.getMode() == MODE_WAKE_AND_UNLOCK_PULSING;
            mCentralSurfaces.setKeyguardFadingAway(startTime, delay, fadeoutDuration);
            mBiometricUnlockController.startKeyguardFadingAway();
            hideBouncer(true /* destroyView */);
            if (wakeUnlockPulsing) {
                mCentralSurfaces.fadeKeyguardWhilePulsing();
                wakeAndUnlockDejank();
            } else {

            boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide();
            if (!staying) {
                mNotificationShadeWindowController.setKeyguardFadingAway(true);
@@ -861,7 +856,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
                mCentralSurfaces.finishKeyguardFadingAway();
                mBiometricUnlockController.finishKeyguardFadingAway();
            }
            }

            updateStates();
            mNotificationShadeWindowController.setKeyguardShowing(false);
Loading