Merge "Fix issue with lifecycle of Activities launched from Lockscreen" into lmp-dev
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 2c39691..6ac5612 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -937,6 +937,13 @@
private boolean mRunningVoice = false;
/**
+ * Set while the keyguard is waiting for an activity to draw.
+ * In this state, if we are sleeping, we allow Activities to launch
+ * so that they can draw before Keyguard dismisses itself.
+ */
+ private boolean mKeyguardWaitingForDraw = false;
+
+ /**
* State of external calls telling us if the device is asleep.
*/
private boolean mWentToSleep = false;
@@ -6242,6 +6249,7 @@
synchronized (this) {
if (DEBUG_LOCKSCREEN) logLockScreen("");
mWindowManager.keyguardWaitingForActivityDrawn();
+ mKeyguardWaitingForDraw = true;
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -9935,11 +9943,11 @@
// Actually is sleeping or shutting down or whatever else in the future
// is an inactive state.
public boolean isSleepingOrShuttingDown() {
- return mSleeping || mShuttingDown;
+ return isSleeping() || mShuttingDown;
}
public boolean isSleeping() {
- return mSleeping;
+ return mSleeping && !mKeyguardWaitingForDraw;
}
void goingToSleep() {
@@ -9961,6 +9969,7 @@
if (mWentToSleep && !mRunningVoice) {
if (!mSleeping) {
mSleeping = true;
+ mKeyguardWaitingForDraw = false;
mStackSupervisor.goingToSleepLocked();
// Initialize the wake times of all processes.
@@ -10070,6 +10079,7 @@
try {
if (DEBUG_LOCKSCREEN) logLockScreen(" shown=" + shown);
mLockScreenShown = shown;
+ mKeyguardWaitingForDraw = false;
comeOutOfSleepIfNeededLocked();
} finally {
Binder.restoreCallingIdentity(ident);