summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java9
-rw-r--r--services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java17
2 files changed, 24 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 8291f48bb723..53fe34d190a6 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2687,8 +2687,8 @@ public final class PowerManagerService extends SystemService
@GuardedBy("mLock")
private void updateUserActivitySummaryLocked(long now, int dirty) {
// Update the status of the user activity timeout timer.
- if ((dirty & (DIRTY_DISPLAY_GROUP_WAKEFULNESS | DIRTY_WAKE_LOCKS
- | DIRTY_USER_ACTIVITY | DIRTY_WAKEFULNESS | DIRTY_SETTINGS)) == 0) {
+ if ((dirty & (DIRTY_DISPLAY_GROUP_WAKEFULNESS | DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY
+ | DIRTY_WAKEFULNESS | DIRTY_SETTINGS | DIRTY_ATTENTIVE)) == 0) {
return;
}
mHandler.removeMessages(MSG_USER_ACTIVITY_TIMEOUT);
@@ -2775,6 +2775,11 @@ public final class PowerManagerService extends SystemService
screenDimDuration);
}
+ if (isAttentiveTimeoutExpired(powerGroup, now)) {
+ groupUserActivitySummary = 0;
+ groupNextTimeout = -1;
+ }
+
hasUserActivitySummary |= groupUserActivitySummary != 0;
if (nextTimeout == -1) {
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index ee9a1e0fc481..a7d3ee9f4d75 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -1098,6 +1098,23 @@ public class PowerManagerServiceTest {
assertThat(mService.getGlobalWakefulnessLocked()).isNotEqualTo(WAKEFULNESS_ASLEEP);
}
+
+ @SuppressWarnings("GuardedBy")
+ @Test
+ public void testInattentiveSleep_goesToSleepFromDream() {
+ setAttentiveTimeout(20000);
+ createService();
+ startSystem();
+ setPluggedIn(true);
+ forceAwake();
+ forceDream();
+ when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+ assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+
+ advanceTime(20500);
+ assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+ }
+
@Test
public void testWakeLock_affectsProperDisplayGroup() {
final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;