Loading services/core/java/com/android/server/power/Notifier.java +12 −10 Original line number Diff line number Diff line Loading @@ -545,7 +545,7 @@ public class Notifier { /** * Called when there has been user activity. */ public void onUserActivity(int event, int uid) { public void onUserActivity(int displayGroupId, int event, int uid) { if (DEBUG) { Slog.d(TAG, "onUserActivity: event=" + event + ", uid=" + uid); } Loading @@ -560,7 +560,8 @@ public class Notifier { if (!mUserActivityPending) { mUserActivityPending = true; Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY); msg.arg1 = event; msg.arg1 = displayGroupId; msg.arg2 = event; msg.setAsynchronous(true); mHandler.sendMessage(msg); } Loading Loading @@ -633,14 +634,15 @@ public class Notifier { /** * Called when the screen policy changes. */ public void onScreenPolicyUpdate(int newPolicy) { public void onScreenPolicyUpdate(int displayGroupId, int newPolicy) { if (DEBUG) { Slog.d(TAG, "onScreenPolicyUpdate: newPolicy=" + newPolicy); } synchronized (mLock) { Message msg = mHandler.obtainMessage(MSG_SCREEN_POLICY); msg.arg1 = newPolicy; msg.arg1 = displayGroupId; msg.arg2 = newPolicy; msg.setAsynchronous(true); mHandler.sendMessage(msg); } Loading Loading @@ -675,7 +677,7 @@ public class Notifier { mSuspendBlocker.release(); } private void sendUserActivity(int event) { private void sendUserActivity(int displayGroupId, int event) { synchronized (mLock) { if (!mUserActivityPending) { return; Loading @@ -686,7 +688,7 @@ public class Notifier { tm.notifyUserActivity(); mPolicy.userActivity(); mFaceDownDetector.userActivity(event); mScreenUndimDetector.userActivity(); mScreenUndimDetector.userActivity(displayGroupId); } void postEnhancedDischargePredictionBroadcast(long delayMs) { Loading Loading @@ -840,8 +842,8 @@ public class Notifier { mSuspendBlocker.release(); } private void screenPolicyChanging(int screenPolicy) { mScreenUndimDetector.recordScreenPolicy(screenPolicy); private void screenPolicyChanging(int displayGroupId, int screenPolicy) { mScreenUndimDetector.recordScreenPolicy(displayGroupId, screenPolicy); } private void lockProfile(@UserIdInt int userId) { Loading @@ -866,7 +868,7 @@ public class Notifier { public void handleMessage(Message msg) { switch (msg.what) { case MSG_USER_ACTIVITY: sendUserActivity(msg.arg1); sendUserActivity(msg.arg1, msg.arg2); break; case MSG_BROADCAST: sendNextBroadcast(); Loading @@ -885,7 +887,7 @@ public class Notifier { showWiredChargingStarted(msg.arg1); break; case MSG_SCREEN_POLICY: screenPolicyChanging(msg.arg1); screenPolicyChanging(msg.arg1, msg.arg2); break; } } Loading services/core/java/com/android/server/power/PowerManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -1792,7 +1792,7 @@ public final class PowerManagerService extends SystemService mLastInteractivePowerHintTime = eventTime; } mNotifier.onUserActivity(event, uid); mNotifier.onUserActivity(powerGroup.getGroupId(), event, uid); mAttentionDetector.onUserActivity(eventTime, event); if (mUserInactiveOverrideFromWindowManager) { Loading Loading @@ -3372,7 +3372,7 @@ public final class PowerManagerService extends SystemService final boolean ready = mDisplayManagerInternal.requestPowerState(groupId, displayPowerRequest, mRequestWaitForNegativeProximity); mNotifier.onScreenPolicyUpdate(displayPowerRequest.policy); mNotifier.onScreenPolicyUpdate(groupId, displayPowerRequest.policy); if (DEBUG_SPEW) { Slog.d(TAG, "updateDisplayPowerStateLocked: displayReady=" + ready Loading services/core/java/com/android/server/power/ScreenUndimDetector.java +7 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.PowerManager; import android.os.SystemClock; import android.provider.DeviceConfig; import android.util.Slog; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; Loading Loading @@ -123,8 +124,8 @@ public class ScreenUndimDetector { * Launches a message that figures out the screen transitions and detects user undims. Must be * called by the parent that is trying to update the screen policy. */ public void recordScreenPolicy(int newPolicy) { if (newPolicy == mCurrentScreenPolicy) { public void recordScreenPolicy(int displayGroupId, int newPolicy) { if (displayGroupId != Display.DEFAULT_DISPLAY_GROUP || newPolicy == mCurrentScreenPolicy) { return; } Loading Loading @@ -268,7 +269,10 @@ public class ScreenUndimDetector { * The user interacted with the screen after an undim, indicating the phone is in use. * We use this event for logging. */ public void userActivity() { public void userActivity(int displayGroupId) { if (displayGroupId != Display.DEFAULT_DISPLAY) { return; } if (mUndimOccurredTime != 1 && mInteractionAfterUndimTime == -1) { mInteractionAfterUndimTime = mClock.getCurrentTime(); } Loading services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java +88 −37 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.hardware.display.DisplayManagerInternal.DisplayPowerReques import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF; import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_VR; import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE; import static android.view.Display.DEFAULT_DISPLAY_GROUP; import static com.android.server.power.ScreenUndimDetector.DEFAULT_MAX_DURATION_BETWEEN_UNDIMS_MILLIS; import static com.android.server.power.ScreenUndimDetector.KEY_KEEP_SCREEN_ON_ENABLED; Loading Loading @@ -60,6 +61,7 @@ public class ScreenUndimDetectorTest { POLICY_DIM, POLICY_BRIGHT, POLICY_VR); private static final int OTHER_DISPLAY_GROUP = DEFAULT_DISPLAY_GROUP + 1; @ClassRule public static final TestableContext sContext = new TestableContext( Loading Loading @@ -106,8 +108,8 @@ public class ScreenUndimDetectorTest { KEY_KEEP_SCREEN_ON_ENABLED, Boolean.FALSE.toString(), false /*makeDefault*/); setup(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); } Loading @@ -116,8 +118,8 @@ public class ScreenUndimDetectorTest { public void recordScreenPolicy_samePolicy_noop() { for (int policy : ALL_POLICIES) { setup(); mScreenUndimDetector.recordScreenPolicy(policy); mScreenUndimDetector.recordScreenPolicy(policy); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); } Loading @@ -125,12 +127,23 @@ public class ScreenUndimDetectorTest { @Test public void recordScreenPolicy_dimToBright_extends() { mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_dimToBright_ignoresOtherDisplayGroup() { mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(OTHER_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_otherTransitions_doesNotExtend() { for (int from : ALL_POLICIES) { Loading @@ -139,8 +152,8 @@ public class ScreenUndimDetectorTest { continue; } setup(); mScreenUndimDetector.recordScreenPolicy(from); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, from); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -155,14 +168,35 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_dimToBright_twoUndimsNeeded_otherDisplayDoesNotExtend() { DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE, KEY_UNDIMS_REQUIRED, Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(OTHER_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } Loading @@ -173,10 +207,10 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -189,10 +223,27 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); } @Test public void recordScreenPolicy_undimToOff_otherDisplayDoesNotResetCounter() { DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE, KEY_UNDIMS_REQUIRED, Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -206,15 +257,15 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.readValuesFromDeviceConfig(); // undim mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); // off mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); // second undim mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(1); Loading @@ -227,12 +278,12 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mClock.advanceTime(DEFAULT_MAX_DURATION_BETWEEN_UNDIMS_MILLIS + 5); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(1); Loading @@ -246,8 +297,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = 123; mScreenUndimDetector.mWakeLock.acquire(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isEqualTo(0); Loading @@ -264,8 +315,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = 123; mScreenUndimDetector.mWakeLock.acquire(); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isEqualTo(0); Loading Loading @@ -294,8 +345,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = SystemClock.currentThreadTimeMillis(); mScreenUndimDetector.recordScreenPolicy(from); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, from); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isNotEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isNotEqualTo(0); Loading Loading
services/core/java/com/android/server/power/Notifier.java +12 −10 Original line number Diff line number Diff line Loading @@ -545,7 +545,7 @@ public class Notifier { /** * Called when there has been user activity. */ public void onUserActivity(int event, int uid) { public void onUserActivity(int displayGroupId, int event, int uid) { if (DEBUG) { Slog.d(TAG, "onUserActivity: event=" + event + ", uid=" + uid); } Loading @@ -560,7 +560,8 @@ public class Notifier { if (!mUserActivityPending) { mUserActivityPending = true; Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY); msg.arg1 = event; msg.arg1 = displayGroupId; msg.arg2 = event; msg.setAsynchronous(true); mHandler.sendMessage(msg); } Loading Loading @@ -633,14 +634,15 @@ public class Notifier { /** * Called when the screen policy changes. */ public void onScreenPolicyUpdate(int newPolicy) { public void onScreenPolicyUpdate(int displayGroupId, int newPolicy) { if (DEBUG) { Slog.d(TAG, "onScreenPolicyUpdate: newPolicy=" + newPolicy); } synchronized (mLock) { Message msg = mHandler.obtainMessage(MSG_SCREEN_POLICY); msg.arg1 = newPolicy; msg.arg1 = displayGroupId; msg.arg2 = newPolicy; msg.setAsynchronous(true); mHandler.sendMessage(msg); } Loading Loading @@ -675,7 +677,7 @@ public class Notifier { mSuspendBlocker.release(); } private void sendUserActivity(int event) { private void sendUserActivity(int displayGroupId, int event) { synchronized (mLock) { if (!mUserActivityPending) { return; Loading @@ -686,7 +688,7 @@ public class Notifier { tm.notifyUserActivity(); mPolicy.userActivity(); mFaceDownDetector.userActivity(event); mScreenUndimDetector.userActivity(); mScreenUndimDetector.userActivity(displayGroupId); } void postEnhancedDischargePredictionBroadcast(long delayMs) { Loading Loading @@ -840,8 +842,8 @@ public class Notifier { mSuspendBlocker.release(); } private void screenPolicyChanging(int screenPolicy) { mScreenUndimDetector.recordScreenPolicy(screenPolicy); private void screenPolicyChanging(int displayGroupId, int screenPolicy) { mScreenUndimDetector.recordScreenPolicy(displayGroupId, screenPolicy); } private void lockProfile(@UserIdInt int userId) { Loading @@ -866,7 +868,7 @@ public class Notifier { public void handleMessage(Message msg) { switch (msg.what) { case MSG_USER_ACTIVITY: sendUserActivity(msg.arg1); sendUserActivity(msg.arg1, msg.arg2); break; case MSG_BROADCAST: sendNextBroadcast(); Loading @@ -885,7 +887,7 @@ public class Notifier { showWiredChargingStarted(msg.arg1); break; case MSG_SCREEN_POLICY: screenPolicyChanging(msg.arg1); screenPolicyChanging(msg.arg1, msg.arg2); break; } } Loading
services/core/java/com/android/server/power/PowerManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -1792,7 +1792,7 @@ public final class PowerManagerService extends SystemService mLastInteractivePowerHintTime = eventTime; } mNotifier.onUserActivity(event, uid); mNotifier.onUserActivity(powerGroup.getGroupId(), event, uid); mAttentionDetector.onUserActivity(eventTime, event); if (mUserInactiveOverrideFromWindowManager) { Loading Loading @@ -3372,7 +3372,7 @@ public final class PowerManagerService extends SystemService final boolean ready = mDisplayManagerInternal.requestPowerState(groupId, displayPowerRequest, mRequestWaitForNegativeProximity); mNotifier.onScreenPolicyUpdate(displayPowerRequest.policy); mNotifier.onScreenPolicyUpdate(groupId, displayPowerRequest.policy); if (DEBUG_SPEW) { Slog.d(TAG, "updateDisplayPowerStateLocked: displayReady=" + ready Loading
services/core/java/com/android/server/power/ScreenUndimDetector.java +7 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.PowerManager; import android.os.SystemClock; import android.provider.DeviceConfig; import android.util.Slog; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; Loading Loading @@ -123,8 +124,8 @@ public class ScreenUndimDetector { * Launches a message that figures out the screen transitions and detects user undims. Must be * called by the parent that is trying to update the screen policy. */ public void recordScreenPolicy(int newPolicy) { if (newPolicy == mCurrentScreenPolicy) { public void recordScreenPolicy(int displayGroupId, int newPolicy) { if (displayGroupId != Display.DEFAULT_DISPLAY_GROUP || newPolicy == mCurrentScreenPolicy) { return; } Loading Loading @@ -268,7 +269,10 @@ public class ScreenUndimDetector { * The user interacted with the screen after an undim, indicating the phone is in use. * We use this event for logging. */ public void userActivity() { public void userActivity(int displayGroupId) { if (displayGroupId != Display.DEFAULT_DISPLAY) { return; } if (mUndimOccurredTime != 1 && mInteractionAfterUndimTime == -1) { mInteractionAfterUndimTime = mClock.getCurrentTime(); } Loading
services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java +88 −37 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.hardware.display.DisplayManagerInternal.DisplayPowerReques import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_OFF; import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.POLICY_VR; import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE; import static android.view.Display.DEFAULT_DISPLAY_GROUP; import static com.android.server.power.ScreenUndimDetector.DEFAULT_MAX_DURATION_BETWEEN_UNDIMS_MILLIS; import static com.android.server.power.ScreenUndimDetector.KEY_KEEP_SCREEN_ON_ENABLED; Loading Loading @@ -60,6 +61,7 @@ public class ScreenUndimDetectorTest { POLICY_DIM, POLICY_BRIGHT, POLICY_VR); private static final int OTHER_DISPLAY_GROUP = DEFAULT_DISPLAY_GROUP + 1; @ClassRule public static final TestableContext sContext = new TestableContext( Loading Loading @@ -106,8 +108,8 @@ public class ScreenUndimDetectorTest { KEY_KEEP_SCREEN_ON_ENABLED, Boolean.FALSE.toString(), false /*makeDefault*/); setup(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); } Loading @@ -116,8 +118,8 @@ public class ScreenUndimDetectorTest { public void recordScreenPolicy_samePolicy_noop() { for (int policy : ALL_POLICIES) { setup(); mScreenUndimDetector.recordScreenPolicy(policy); mScreenUndimDetector.recordScreenPolicy(policy); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); } Loading @@ -125,12 +127,23 @@ public class ScreenUndimDetectorTest { @Test public void recordScreenPolicy_dimToBright_extends() { mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_dimToBright_ignoresOtherDisplayGroup() { mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(OTHER_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_otherTransitions_doesNotExtend() { for (int from : ALL_POLICIES) { Loading @@ -139,8 +152,8 @@ public class ScreenUndimDetectorTest { continue; } setup(); mScreenUndimDetector.recordScreenPolicy(from); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, from); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -155,14 +168,35 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } @Test public void recordScreenPolicy_dimToBright_twoUndimsNeeded_otherDisplayDoesNotExtend() { DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE, KEY_UNDIMS_REQUIRED, Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(OTHER_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isTrue(); } Loading @@ -173,10 +207,10 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -189,10 +223,27 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); } @Test public void recordScreenPolicy_undimToOff_otherDisplayDoesNotResetCounter() { DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE, KEY_UNDIMS_REQUIRED, Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); Loading @@ -206,15 +257,15 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.readValuesFromDeviceConfig(); // undim mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); // off mScreenUndimDetector.recordScreenPolicy(POLICY_OFF); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_OFF); // second undim mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(1); Loading @@ -227,12 +278,12 @@ public class ScreenUndimDetectorTest { Integer.toString(2), false /*makeDefault*/); mScreenUndimDetector.readValuesFromDeviceConfig(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mClock.advanceTime(DEFAULT_MAX_DURATION_BETWEEN_UNDIMS_MILLIS + 5); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); assertThat(mScreenUndimDetector.mWakeLock.isHeld()).isFalse(); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(1); Loading @@ -246,8 +297,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = 123; mScreenUndimDetector.mWakeLock.acquire(); mScreenUndimDetector.recordScreenPolicy(POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isEqualTo(0); Loading @@ -264,8 +315,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = 123; mScreenUndimDetector.mWakeLock.acquire(); mScreenUndimDetector.recordScreenPolicy(POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isEqualTo(0); Loading Loading @@ -294,8 +345,8 @@ public class ScreenUndimDetectorTest { mScreenUndimDetector.mUndimCounterStartedMillis = SystemClock.currentThreadTimeMillis(); mScreenUndimDetector.recordScreenPolicy(from); mScreenUndimDetector.recordScreenPolicy(to); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, from); mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to); assertThat(mScreenUndimDetector.mUndimCounter).isNotEqualTo(0); assertThat(mScreenUndimDetector.mUndimCounterStartedMillis).isNotEqualTo(0); Loading