Catch unusual DeadObjectExceptions.
This appears to be possible but very rare (0.0002% of sessions). Launcher asks us to null out the LauncherUnlockAnimationController in onDestroy(), but that's an IPC so might be delayed. Safest to catch the exception here. It should be fine to fail to play the unlock animation on a Launcher that is being destroyed anyway. Bug: 245867371 Test: atest SystemUITests Change-Id: I96f14c2036daa945db324dc39b023a0facfb54dd
This commit is contained in:
@@ -22,6 +22,7 @@ import android.animation.ValueAnimator
|
||||
import android.content.Context
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.Rect
|
||||
import android.os.DeadObjectException
|
||||
import android.os.Handler
|
||||
import android.os.PowerManager
|
||||
import android.os.RemoteException
|
||||
@@ -524,10 +525,22 @@ class KeyguardUnlockAnimationController @Inject constructor(
|
||||
surfaceBehindAlpha = 1f
|
||||
setSurfaceBehindAppearAmount(1f)
|
||||
|
||||
launcherUnlockController?.playUnlockAnimation(
|
||||
true,
|
||||
UNLOCK_ANIMATION_DURATION_MS + CANNED_UNLOCK_START_DELAY,
|
||||
0 /* startDelay */)
|
||||
try {
|
||||
launcherUnlockController?.playUnlockAnimation(
|
||||
true,
|
||||
UNLOCK_ANIMATION_DURATION_MS + CANNED_UNLOCK_START_DELAY,
|
||||
0 /* startDelay */)
|
||||
} catch (e: DeadObjectException) {
|
||||
// Hello! If you are here investigating a bug where Launcher is blank (no icons)
|
||||
// then the below assumption about Launcher's destruction was incorrect. This
|
||||
// would mean prepareToUnlock was called (blanking Launcher in preparation for
|
||||
// the beginning of the unlock animation), but then somehow we were unable to
|
||||
// call playUnlockAnimation to animate the icons back in.
|
||||
Log.e(TAG, "launcherUnlockAnimationController was dead, but non-null. " +
|
||||
"Catching exception as this should mean Launcher is in the process " +
|
||||
"of being destroyed, but the IPC to System UI telling us hasn't " +
|
||||
"arrived yet.")
|
||||
}
|
||||
|
||||
launcherPreparedForUnlock = false
|
||||
} else {
|
||||
@@ -604,11 +617,23 @@ class KeyguardUnlockAnimationController @Inject constructor(
|
||||
private fun unlockToLauncherWithInWindowAnimations() {
|
||||
setSurfaceBehindAppearAmount(1f)
|
||||
|
||||
// Begin the animation, waiting for the shade to animate out.
|
||||
launcherUnlockController?.playUnlockAnimation(
|
||||
true /* unlocked */,
|
||||
LAUNCHER_ICONS_ANIMATION_DURATION_MS /* duration */,
|
||||
CANNED_UNLOCK_START_DELAY /* startDelay */)
|
||||
try {
|
||||
// Begin the animation, waiting for the shade to animate out.
|
||||
launcherUnlockController?.playUnlockAnimation(
|
||||
true /* unlocked */,
|
||||
LAUNCHER_ICONS_ANIMATION_DURATION_MS /* duration */,
|
||||
CANNED_UNLOCK_START_DELAY /* startDelay */)
|
||||
} catch (e: DeadObjectException) {
|
||||
// Hello! If you are here investigating a bug where Launcher is blank (no icons)
|
||||
// then the below assumption about Launcher's destruction was incorrect. This
|
||||
// would mean prepareToUnlock was called (blanking Launcher in preparation for
|
||||
// the beginning of the unlock animation), but then somehow we were unable to
|
||||
// call playUnlockAnimation to animate the icons back in.
|
||||
Log.e(TAG, "launcherUnlockAnimationController was dead, but non-null. " +
|
||||
"Catching exception as this should mean Launcher is in the process " +
|
||||
"of being destroyed, but the IPC to System UI telling us hasn't " +
|
||||
"arrived yet.")
|
||||
}
|
||||
|
||||
launcherPreparedForUnlock = false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user