diff options
author | Josh Tsuji <tsuji@google.com> | 2021-05-26 18:40:12 -0400 |
---|---|---|
committer | Josh Tsuji <tsuji@google.com> | 2021-05-27 16:26:22 -0400 |
commit | ee89a547f15bfc6d07553304f295ad7204ebec23 (patch) | |
tree | 0a3262ce5b0955acb18ffe697f13f7ade6de064f /packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java | |
parent | 018e1142021bb8f9a2b0332921c16d4e86804acf (diff) |
Adds the ScreenOffAnimationController, which fixes multiple issues with unlocked screen off.
This changes the screen off animation so that the controller directly animates the LightRevealScrim and the shade keyguard UI, rather then tying these to the dozeAmount. This makes it easier for us to manage/cancel these animations, such as during the camera launch gesture, since the various doze components update their state asynchronously.
This approach also means that instead of actually changing everything to KEYGUARD as soon as the power button is pressed, we actually just show the LightRevealScrim and the shade's AOD UI. This results in far less jank. We then actually show the keyguard once the animation finishes or is cancelled.
Bug: 169693662
Bug: 169739682
Bug: 181020504
Fixes: 185567665
Fixes: 189342687
Fixes: 185567665
Fixes: 183195436
Test: atest SystemUITests
Test: trigger screen off and cancel it
Test: trigger screen off and don't cancel it, make sure it wakes up fine
Test: disable 'power button locks instantly' and make sure it doesn't lock the device, both when the animation finishes or when it's cancelled
Test: press the power button twice in rapid succession
Test: press the power button twice in slower succession about 200ms apart (which triggers the camera onWakingUp vs onFinishedGoingToSleep)
Test: press the power button 5 times, make sure emergency gesture comes up
Test: disable AOD, observe no screen off animation and lock functionality works
Change-Id: I1c44304becdadfd37bab7fd81286a9702e5d6141
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java')
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java index 7cb4846cf7e7..92af58eb9af4 100644 --- a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +++ b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java @@ -107,6 +107,21 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie } }; + private final StatusBarStateController.StateListener mStatusBarStatePersistentListener = + new StatusBarStateController.StateListener() { + @Override + public void onDozeAmountChanged(float linear, float eased) { + boolean noAnimation = (mDozeAmount == 0f && linear == 1f) + || (mDozeAmount == 1f && linear == 0f); + boolean isDozing = linear > mDozeAmount; + mDozeAmount = linear; + if (mIsDozing != isDozing) { + mIsDozing = isDozing; + mView.animateDoze(mIsDozing, !noAnimation); + } + } + }; + private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() { @Override @@ -133,14 +148,15 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie updateLocale(); mBroadcastDispatcher.registerReceiver(mLocaleBroadcastReceiver, new IntentFilter(Intent.ACTION_LOCALE_CHANGED)); - mStatusBarStateController.addCallback(mStatusBarStateListener); - mIsDozing = mStatusBarStateController.isDozing(); mDozeAmount = mStatusBarStateController.getDozeAmount(); mBatteryController.addCallback(mBatteryCallback); mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); mKeyguardShowing = true; + mStatusBarStateController.removeCallback(mStatusBarStatePersistentListener); + mStatusBarStateController.addCallback(mStatusBarStatePersistentListener); + refreshTime(); initColors(); mView.animateDoze(mIsDozing, false); @@ -149,9 +165,11 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie @Override protected void onViewDetached() { mBroadcastDispatcher.unregisterReceiver(mLocaleBroadcastReceiver); - mStatusBarStateController.removeCallback(mStatusBarStateListener); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); mBatteryController.removeCallback(mBatteryCallback); + if (!mView.isAttachedToWindow()) { + mStatusBarStateController.removeCallback(mStatusBarStatePersistentListener); + } } /** Animate the clock appearance */ @@ -199,19 +217,4 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mView.setColors(mDozingColor, mLockScreenColor); mView.animateDoze(mIsDozing, false); } - - private final StatusBarStateController.StateListener mStatusBarStateListener = - new StatusBarStateController.StateListener() { - @Override - public void onDozeAmountChanged(float linear, float eased) { - boolean noAnimation = (mDozeAmount == 0f && linear == 1f) - || (mDozeAmount == 1f && linear == 0f); - boolean isDozing = linear > mDozeAmount; - mDozeAmount = linear; - if (mIsDozing != isDozing) { - mIsDozing = isDozing; - mView.animateDoze(mIsDozing, !noAnimation); - } - } - }; } |