Pause activities when the screen is off.
Bug: 19948628
Change-Id: I90923605d50f4ee381da4e05117879554e0a1dee
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 6e52358..25ca167 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -514,6 +514,7 @@
boolean mDreamingLockscreen;
boolean mDreamingSleepTokenNeeded;
SleepToken mDreamingSleepToken;
+ SleepToken mScreenOffSleepToken;
boolean mKeyguardSecure;
boolean mKeyguardSecureIncludingHidden;
volatile boolean mKeyguardOccluded;
@@ -5385,6 +5386,7 @@
public void screenTurnedOff() {
if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turned off...");
+ updateScreenOffSleepToken(true);
synchronized (mLock) {
mScreenOnEarly = false;
mScreenOnFully = false;
@@ -5399,6 +5401,7 @@
public void screenTurningOn(final ScreenOnListener screenOnListener) {
if (DEBUG_WAKEUP) Slog.i(TAG, "Screen turning on...");
+ updateScreenOffSleepToken(false);
synchronized (mLock) {
mScreenOnEarly = true;
mScreenOnFully = false;
@@ -6021,6 +6024,20 @@
} else {
if (mDreamingSleepToken != null) {
mDreamingSleepToken.release();
+ mDreamingSleepToken = null;
+ }
+ }
+ }
+
+ private void updateScreenOffSleepToken(boolean acquire) {
+ if (acquire) {
+ if (mScreenOffSleepToken == null) {
+ mScreenOffSleepToken = mActivityManagerInternal.acquireSleepToken("ScreenOff");
+ }
+ } else {
+ if (mScreenOffSleepToken != null) {
+ mScreenOffSleepToken.release();
+ mScreenOffSleepToken = null;
}
}
}