[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
This commit is contained in:
Matt Pietal
2022-09-08 18:51:16 +00:00
parent 162d9c0a4d
commit ddc1437ca0
6 changed files with 32 additions and 67 deletions

View File

@@ -81,7 +81,6 @@ class NotificationShadeDepthController @Inject constructor(
} }
lateinit var root: View lateinit var root: View
private var blurRoot: View? = null
private var keyguardAnimator: Animator? = null private var keyguardAnimator: Animator? = null
private var notificationAnimator: Animator? = null private var notificationAnimator: Animator? = null
private var updateScheduled: Boolean = false private var updateScheduled: Boolean = false
@@ -235,7 +234,7 @@ class NotificationShadeDepthController @Inject constructor(
val opaque = scrimsVisible && !blursDisabledForAppLaunch val opaque = scrimsVisible && !blursDisabledForAppLaunch
Trace.traceCounter(Trace.TRACE_TAG_APP, "shade_blur_radius", blur) 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 lastAppliedBlur = blur
wallpaperController.setNotificationShadeZoom(zoomOut) wallpaperController.setNotificationShadeZoom(zoomOut)
listeners.forEach { listeners.forEach {
@@ -271,7 +270,6 @@ class NotificationShadeDepthController @Inject constructor(
override fun onAnimationEnd(animation: Animator?) { override fun onAnimationEnd(animation: Animator?) {
keyguardAnimator = null keyguardAnimator = null
wakeAndUnlockBlurRadius = 0f wakeAndUnlockBlurRadius = 0f
scheduleUpdate()
} }
}) })
start() start()
@@ -302,7 +300,6 @@ class NotificationShadeDepthController @Inject constructor(
override fun onDozeAmountChanged(linear: Float, eased: Float) { override fun onDozeAmountChanged(linear: Float, eased: Float) {
wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(eased) wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(eased)
scheduleUpdate()
} }
} }
@@ -439,12 +436,11 @@ class NotificationShadeDepthController @Inject constructor(
shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized).toInt()) shadeAnimation.animateTo(blurUtils.blurRadiusOfRatio(targetBlurNormalized).toInt())
} }
private fun scheduleUpdate(viewToBlur: View? = null) { private fun scheduleUpdate() {
if (updateScheduled) { if (updateScheduled) {
return return
} }
updateScheduled = true updateScheduled = true
blurRoot = viewToBlur
choreographer.postFrameCallback(updateBlurCallback) choreographer.postFrameCallback(updateBlurCallback)
} }
@@ -495,16 +491,11 @@ class NotificationShadeDepthController @Inject constructor(
*/ */
private var pendingRadius = -1 private var pendingRadius = -1
/**
* View on {@link Surface} that wants depth.
*/
private var view: View? = null
private var springAnimation = SpringAnimation(this, object : private var springAnimation = SpringAnimation(this, object :
FloatPropertyCompat<DepthAnimation>("blurRadius") { FloatPropertyCompat<DepthAnimation>("blurRadius") {
override fun setValue(rect: DepthAnimation?, value: Float) { override fun setValue(rect: DepthAnimation?, value: Float) {
radius = value radius = value
scheduleUpdate(view) scheduleUpdate()
} }
override fun getValue(rect: DepthAnimation?): Float { override fun getValue(rect: DepthAnimation?): Float {
@@ -519,11 +510,10 @@ class NotificationShadeDepthController @Inject constructor(
springAnimation.addEndListener { _, _, _, _ -> pendingRadius = -1 } springAnimation.addEndListener { _, _, _, _ -> pendingRadius = -1 }
} }
fun animateTo(newRadius: Int, viewToBlur: View? = null) { fun animateTo(newRadius: Int) {
if (pendingRadius == newRadius && view == viewToBlur) { if (pendingRadius == newRadius) {
return return
} }
view = viewToBlur
pendingRadius = newRadius pendingRadius = newRadius
springAnimation.animateToFinalPosition(newRadius.toFloat()) springAnimation.animateToFinalPosition(newRadius.toFloat())
} }

View File

@@ -390,8 +390,6 @@ public interface CentralSurfaces extends Dumpable, ActivityStarter, LifecycleOwn
void fadeKeyguardAfterLaunchTransition(Runnable beforeFading, void fadeKeyguardAfterLaunchTransition(Runnable beforeFading,
Runnable endRunnable, Runnable cancelRunnable); Runnable endRunnable, Runnable cancelRunnable);
void fadeKeyguardWhilePulsing();
void animateKeyguardUnoccluding(); void animateKeyguardUnoccluding();
void startLaunchTransitionTimeout(); void startLaunchTransitionTimeout();

View File

@@ -3018,19 +3018,6 @@ public class CentralSurfacesImpl extends CoreStartable implements
mLaunchTransitionCancelRunnable = null; 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. * Plays the animation when an activity that was occluding Keyguard goes away.
*/ */

View File

@@ -209,12 +209,8 @@ public final class DozeServiceHost implements DozeHost {
void updateDozing() { void updateDozing() {
Assert.isMainThread(); Assert.isMainThread();
// When in wake-and-unlock while pulsing, keep dozing state until fully unlocked. boolean dozing =
boolean mDozingRequested && mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
dozing =
mDozingRequested && mStatusBarStateController.getState() == StatusBarState.KEYGUARD
|| mBiometricUnlockControllerLazy.get().getMode()
== BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING;
// When in wake-and-unlock we may not have received a change to StatusBarState // 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. // but we still should not be dozing, manually set to false.
if (mBiometricUnlockControllerLazy.get().getMode() if (mBiometricUnlockControllerLazy.get().getMode()

View File

@@ -837,15 +837,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}); });
} else { } else {
executeAfterKeyguardGoneAction(); executeAfterKeyguardGoneAction();
boolean wakeUnlockPulsing =
mBiometricUnlockController.getMode() == MODE_WAKE_AND_UNLOCK_PULSING;
mCentralSurfaces.setKeyguardFadingAway(startTime, delay, fadeoutDuration); mCentralSurfaces.setKeyguardFadingAway(startTime, delay, fadeoutDuration);
mBiometricUnlockController.startKeyguardFadingAway(); mBiometricUnlockController.startKeyguardFadingAway();
hideBouncer(true /* destroyView */); hideBouncer(true /* destroyView */);
if (wakeUnlockPulsing) {
mCentralSurfaces.fadeKeyguardWhilePulsing();
wakeAndUnlockDejank();
} else {
boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide(); boolean staying = mStatusBarStateController.leaveOpenOnKeyguardHide();
if (!staying) { if (!staying) {
mNotificationShadeWindowController.setKeyguardFadingAway(true); mNotificationShadeWindowController.setKeyguardFadingAway(true);
@@ -861,7 +856,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mCentralSurfaces.finishKeyguardFadingAway(); mCentralSurfaces.finishKeyguardFadingAway();
mBiometricUnlockController.finishKeyguardFadingAway(); mBiometricUnlockController.finishKeyguardFadingAway();
} }
}
updateStates(); updateStates();
mNotificationShadeWindowController.setKeyguardShowing(false); mNotificationShadeWindowController.setKeyguardShowing(false);

View File

@@ -48,7 +48,6 @@ import org.mockito.ArgumentMatchers.floatThat
import org.mockito.Captor import org.mockito.Captor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito import org.mockito.Mockito
import org.mockito.Mockito.`when`
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.anyFloat import org.mockito.Mockito.anyFloat
import org.mockito.Mockito.anyString import org.mockito.Mockito.anyString
@@ -56,6 +55,7 @@ import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.never import org.mockito.Mockito.never
import org.mockito.Mockito.reset import org.mockito.Mockito.reset
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoJUnit
@RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class)
@@ -139,7 +139,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
PanelExpansionChangeEvent( PanelExpansionChangeEvent(
fraction = 1f, expanded = true, tracking = false, dragDownPxAmount = 0f)) fraction = 1f, expanded = true, tracking = false, dragDownPxAmount = 0f))
verify(shadeAnimation).animateTo(eq(maxBlur), any()) verify(shadeAnimation).animateTo(eq(maxBlur))
} }
@Test @Test
@@ -147,7 +147,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
PanelExpansionChangeEvent( PanelExpansionChangeEvent(
fraction = 0.01f, expanded = false, tracking = false, dragDownPxAmount = 0f)) fraction = 0.01f, expanded = false, tracking = false, dragDownPxAmount = 0f))
verify(shadeAnimation).animateTo(eq(maxBlur), any()) verify(shadeAnimation).animateTo(eq(maxBlur))
} }
@Test @Test
@@ -157,7 +157,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
PanelExpansionChangeEvent( PanelExpansionChangeEvent(
fraction = 0f, expanded = false, tracking = false, dragDownPxAmount = 0f)) fraction = 0f, expanded = false, tracking = false, dragDownPxAmount = 0f))
verify(shadeAnimation).animateTo(eq(0), any()) verify(shadeAnimation).animateTo(eq(0))
} }
@Test @Test
@@ -168,15 +168,15 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
onPanelExpansionChanged_apliesBlur_ifShade() onPanelExpansionChanged_apliesBlur_ifShade()
clearInvocations(shadeAnimation) clearInvocations(shadeAnimation)
notificationShadeDepthController.onPanelExpansionChanged(event) notificationShadeDepthController.onPanelExpansionChanged(event)
verify(shadeAnimation, never()).animateTo(anyInt(), any()) verify(shadeAnimation, never()).animateTo(anyInt())
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
event.copy(fraction = 0.9f, tracking = true)) event.copy(fraction = 0.9f, tracking = true))
verify(shadeAnimation, never()).animateTo(anyInt(), any()) verify(shadeAnimation, never()).animateTo(anyInt())
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
event.copy(fraction = 0.8f, tracking = false)) event.copy(fraction = 0.8f, tracking = false))
verify(shadeAnimation).animateTo(eq(0), any()) verify(shadeAnimation).animateTo(eq(0))
} }
@Test @Test
@@ -186,7 +186,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
notificationShadeDepthController.onPanelExpansionChanged( notificationShadeDepthController.onPanelExpansionChanged(
PanelExpansionChangeEvent( PanelExpansionChangeEvent(
fraction = 0.6f, expanded = true, tracking = true, dragDownPxAmount = 0f)) fraction = 0.6f, expanded = true, tracking = true, dragDownPxAmount = 0f))
verify(shadeAnimation).animateTo(eq(maxBlur), any()) verify(shadeAnimation).animateTo(eq(maxBlur))
} }
@Test @Test
@@ -212,7 +212,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
statusBarState = StatusBarState.KEYGUARD statusBarState = StatusBarState.KEYGUARD
statusBarStateListener.onStateChanged(statusBarState) statusBarStateListener.onStateChanged(statusBarState)
verify(shadeAnimation).animateTo(eq(0), any()) verify(shadeAnimation).animateTo(eq(0))
} }
@Test @Test
@@ -395,13 +395,13 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
@Test @Test
fun brightnessMirrorVisible_whenVisible() { fun brightnessMirrorVisible_whenVisible() {
notificationShadeDepthController.brightnessMirrorVisible = true notificationShadeDepthController.brightnessMirrorVisible = true
verify(brightnessSpring).animateTo(eq(maxBlur), any()) verify(brightnessSpring).animateTo(eq(maxBlur))
} }
@Test @Test
fun brightnessMirrorVisible_whenHidden() { fun brightnessMirrorVisible_whenHidden() {
notificationShadeDepthController.brightnessMirrorVisible = false notificationShadeDepthController.brightnessMirrorVisible = false
verify(brightnessSpring).animateTo(eq(0), any()) verify(brightnessSpring).animateTo(eq(0))
} }
@Test @Test
@@ -424,7 +424,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
fun ignoreShadeBlurUntilHidden_whennNull_ignoresIfShadeHasNoBlur() { fun ignoreShadeBlurUntilHidden_whennNull_ignoresIfShadeHasNoBlur() {
`when`(shadeAnimation.radius).thenReturn(0f) `when`(shadeAnimation.radius).thenReturn(0f)
notificationShadeDepthController.blursDisabledForAppLaunch = true notificationShadeDepthController.blursDisabledForAppLaunch = true
verify(shadeAnimation, never()).animateTo(anyInt(), any()) verify(shadeAnimation, never()).animateTo(anyInt())
} }
private fun enableSplitShade() { private fun enableSplitShade() {