summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author wilsonshih <wilsonshih@google.com> 2022-12-15 09:34:39 +0000
committer Wei Sheng Shih <wilsonshih@google.com> 2022-12-15 09:52:56 +0000
commit3306e7bb7c3da7f959b65e3ed9296b237d4603e7 (patch)
tree151ef0c1905ad255b7d42d43d3f8587b8cea5ff2
parente068bb37e49c583e657585727aa7f3807b9d7777 (diff)
[ShellTrans] Fix SystemUI crash when finish keyguard animation.
The animation leashes will be release after calls KVM#finishSurfaceBehindRemoteAnimation, so if there are playing animation with setSurfaceBehindAppearAmount, the released leash could cause SystemUI crash. There are two scenario may cause that crash: 1. Hovering between Keyguard <=> Launcher, which could trigger fadeOutSurfaceBehind and finish the remote animation, so the surfaceBehindRemoteAnimationTargets could remained in KUAC. Then when next transition animation start, KUAC could attemp to play animation with those released leash. 2. Unlock keyguard directly, notifyFinishedKeyguardExitAnimation will cancel the surfaceBehindAlphaAnimator, which could finish the remote animation immediately before setSurfaceBehindAppearAmount. To ensure the opening app must be visible, calls setSurfaceBehindAppearAmount before cancel animatiors. Fixes: 262444073 Test: enable shell transition, then scroll up to unlock device, a. verify the launcher won't stay in a fully/semi transparent. b. verify the launcher won't reshow when scrolling on keyguard. Also verify above cases via fingerprint unlock. Change-Id: Ib8c0211c35e76ec46337c1e8807e381081755ad1
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt7
1 files changed, 4 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
index 0c46b23fd23e..53070a0ab8a7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
@@ -321,6 +321,7 @@ class KeyguardUnlockAnimationController @Inject constructor(
// and unlock the device as well as hiding the surface.
if (surfaceBehindAlpha == 0f) {
Log.d(TAG, "surfaceBehindAlphaAnimator#onAnimationEnd")
+ surfaceBehindRemoteAnimationTargets = null
keyguardViewMediator.get().finishSurfaceBehindRemoteAnimation(
false /* cancelled */)
} else {
@@ -825,13 +826,13 @@ class KeyguardUnlockAnimationController @Inject constructor(
// Make sure we made the surface behind fully visible, just in case. It should already be
// fully visible. The exit animation is finished, and we should not hold the leash anymore,
// so forcing it to 1f.
- surfaceBehindAlphaAnimator.cancel()
- surfaceBehindEntryAnimator.cancel()
surfaceBehindAlpha = 1f
setSurfaceBehindAppearAmount(1f)
+ surfaceBehindAlphaAnimator.cancel()
+ surfaceBehindEntryAnimator.cancel()
try {
launcherUnlockController?.setUnlockAmount(1f, false /* forceIfAnimating */)
- } catch (e: RemoteException) {
+ } catch (e: RemoteException) {
Log.e(TAG, "Remote exception in notifyFinishedKeyguardExitAnimation", e)
}