Don't re-hide the keyguard if it isn't showing.

This has a horrifying and unpredictable side effect of triggering
post-unlock Runnables that are stored in StatusBar.java, which can
result in a blank screen on unlock in certain race conditions.

Test: unlock, launch an app during the unlock animation, press power, wake up at bad time
Test: I wrote a custom build to force the above scenario to verify this works
Fixes: 214647311
Change-Id: I00655c2e85c46bd0c52b77094757e155b1a6f9c9
This commit is contained in:
Josh Tsuji
2022-02-24 17:47:30 -05:00
parent c19e723931
commit 22ae995c20

View File

@@ -23,6 +23,7 @@ import android.content.Context
import android.graphics.Matrix import android.graphics.Matrix
import android.graphics.Rect import android.graphics.Rect
import android.os.Handler import android.os.Handler
import android.util.Log
import android.view.RemoteAnimationTarget import android.view.RemoteAnimationTarget
import android.view.SyncRtSurfaceTransactionApplier import android.view.SyncRtSurfaceTransactionApplier
import android.view.View import android.view.View
@@ -47,6 +48,8 @@ import dagger.Lazy
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.min import kotlin.math.min
const val TAG = "KeyguardUnlock"
/** /**
* Starting scale factor for the app/launcher surface behind the keyguard, when it's animating * Starting scale factor for the app/launcher surface behind the keyguard, when it's animating
* in during keyguard exit. * in during keyguard exit.
@@ -584,8 +587,16 @@ class KeyguardUnlockAnimationController @Inject constructor(
* animation. * animation.
*/ */
fun hideKeyguardViewAfterRemoteAnimation() { fun hideKeyguardViewAfterRemoteAnimation() {
if (keyguardViewController.isShowing) {
// Hide the keyguard, with no fade out since we animated it away during the unlock. // Hide the keyguard, with no fade out since we animated it away during the unlock.
keyguardViewController.hide(surfaceBehindRemoteAnimationStartTime, 0 /* fadeOutDuration */) keyguardViewController.hide(
surfaceBehindRemoteAnimationStartTime,
0 /* fadeOutDuration */
)
} else {
Log.e(TAG, "#hideKeyguardViewAfterRemoteAnimation called when keyguard view is not " +
"showing. Ignoring...")
}
} }
private fun applyParamsToSurface(params: SyncRtSurfaceTransactionApplier.SurfaceParams) { private fun applyParamsToSurface(params: SyncRtSurfaceTransactionApplier.SurfaceParams) {