diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-26 04:39:55 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-26 04:39:55 +0000 |
commit | af1e71dc54d7a75ac061e57ff11b9cc52b00cf5a (patch) | |
tree | 8f5f48a1db976b96a12e9f4658cc0db25535b052 | |
parent | 80e3362bf9e65880adb94b82476b5f8f8afc072a (diff) | |
parent | 0b524af443512f22b14e408448a99579bdb2fc46 (diff) | |
download | base-af1e71dc54d7a75ac061e57ff11b9cc52b00cf5a.tar.gz |
Merge cherrypicks of [16024420] into sc-qpr1-d-release.
Change-Id: I08dd0f721191ea2eccd0447aad85d8d898e8f5d5
3 files changed, 53 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt index 21ed9da896a5..bbee1942cfc4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/LightRevealScrim.kt @@ -155,6 +155,11 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context, lateinit var isScrimOpaqueChangedListener: Consumer<Boolean> /** + * A runnable to call when the scrim has been fully revealed. This is only invoked once + */ + var fullyRevealedRunnable: Runnable? = null + + /** * How much of the underlying views are revealed, in percent. 0 means they will be completely * obscured and 1 means they'll be fully visible. */ @@ -165,10 +170,20 @@ class LightRevealScrim(context: Context?, attrs: AttributeSet?) : View(context, revealEffect.setRevealAmountOnScrim(value, this) updateScrimOpaque() + maybeTriggerFullyRevealedRunnable() invalidate() } } + private fun maybeTriggerFullyRevealedRunnable() { + if (revealAmount == 1.0f) { + fullyRevealedRunnable?.let { + it.run() + fullyRevealedRunnable = null + } + } + } + /** * The [LightRevealEffect] used to manipulate the radial gradient whenever [revealAmount] * changes. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index 2a8771e96e7b..98e6879d208f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -37,7 +37,6 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.phone.BiometricUnlockController -import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.PanelExpansionListener import com.android.systemui.statusbar.phone.ScrimController @@ -73,6 +72,10 @@ class NotificationShadeDepthController @Inject constructor( private const val TAG = "DepthController" } + /** + * Is did we already unblur while dozing? + */ + private var alreadyUnblurredWhileDozing = false lateinit var root: View private var blurRoot: View? = null private var keyguardAnimator: Animator? = null @@ -237,9 +240,11 @@ class NotificationShadeDepthController @Inject constructor( private val keyguardStateCallback = object : KeyguardStateController.Callback { override fun onKeyguardFadingAwayChanged() { if (!keyguardStateController.isKeyguardFadingAway || - biometricUnlockController.mode != MODE_WAKE_AND_UNLOCK) { + !biometricUnlockController.isWakeAndUnlock) { return } + // When wakeAndUnlocking the screen remains dozing, so we have to manually trigger + // the unblur earlier keyguardAnimator?.cancel() keyguardAnimator = ValueAnimator.ofFloat(1f, 0f).apply { @@ -261,6 +266,7 @@ class NotificationShadeDepthController @Inject constructor( }) start() } + alreadyUnblurredWhileDozing = statusBarStateController.dozeAmount != 0.0f } override fun onKeyguardShowingChanged() { @@ -282,10 +288,24 @@ class NotificationShadeDepthController @Inject constructor( if (isDozing) { shadeAnimation.finishIfRunning() brightnessMirrorSpring.finishIfRunning() + + // unset this for safety, to be ready for the next wakeup + alreadyUnblurredWhileDozing = false } } override fun onDozeAmountChanged(linear: Float, eased: Float) { + if (alreadyUnblurredWhileDozing) { + if (linear == 0.0f) { + // We finished waking up, let's reset + alreadyUnblurredWhileDozing = false + } else { + // We've already handled the unbluring from the keyguardAnimator above. + // if we would continue, we'd play another unzoom / blur animation from the + // dozing changing. + return + } + } wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(eased) scheduleUpdate() } @@ -443,6 +463,7 @@ class NotificationShadeDepthController @Inject constructor( it.println("blursDisabledForAppLaunch: $blursDisabledForAppLaunch") it.println("qsPanelExpansion: $qsPanelExpansion") it.println("transitionToFullShadeProgress: $transitionToFullShadeProgress") + it.println("alreadyUnblurredWhileDozing: $alreadyUnblurredWhileDozing") it.println("lastAppliedBlur: $lastAppliedBlur") } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 88434cc214be..6cf1d82149ce 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -360,6 +360,7 @@ public class StatusBar extends SystemUI implements DemoMode, } private LockscreenShadeTransitionController mLockscreenShadeTransitionController; + private boolean mCallingFadingAwayAfterReveal; public interface ExpansionChangedListener { void onExpansionChanged(float expansion, boolean expanded); @@ -639,7 +640,7 @@ public class StatusBar extends SystemUI implements DemoMode, + "mStatusBarKeyguardViewManager was null"); return; } - if (mKeyguardStateController.isKeyguardFadingAway()) { + if (mKeyguardStateController.isKeyguardFadingAway() && !mCallingFadingAwayAfterReveal) { mStatusBarKeyguardViewManager.onKeyguardFadedAway(); } } @@ -3583,8 +3584,19 @@ public class StatusBar extends SystemUI implements DemoMode, public void fadeKeyguardWhilePulsing() { mNotificationPanelViewController.fadeOut(0, FADE_KEYGUARD_DURATION_PULSING, ()-> { - hideKeyguard(); - mStatusBarKeyguardViewManager.onKeyguardFadedAway(); + Runnable finishFading = () -> { + mCallingFadingAwayAfterReveal = false; + hideKeyguard(); + mStatusBarKeyguardViewManager.onKeyguardFadedAway(); + }; + if (mLightRevealScrim.getRevealAmount() != 1.0f) { + mCallingFadingAwayAfterReveal = true; + // we're still revealing the Light reveal, let's only go to keyguard once + // Going there introduces lots of jank + mLightRevealScrim.setFullyRevealedRunnable(finishFading); + } else { + finishFading.run(); + } }).start(); } |