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:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user