diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java index 355ea1c6e72dc..6e63315d28303 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerController2Test.java @@ -80,7 +80,7 @@ import java.util.List; @RunWith(AndroidJUnit4.class) public final class DisplayPowerController2Test { private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY; - private static final String UNIQUE_DISPLAY_ID = "unique_id_test123"; + private static final String UNIQUE_ID = "unique_id_test123"; private static final int FOLLOWER_DISPLAY_ID = DISPLAY_ID + 1; private static final String FOLLOWER_UNIQUE_ID = "unique_id_456"; private static final int SECOND_FOLLOWER_DISPLAY_ID = FOLLOWER_DISPLAY_ID + 1; @@ -91,7 +91,7 @@ public final class DisplayPowerController2Test { private TestLooper mTestLooper; private Handler mHandler; private Context mContextSpy; - private DisplayPowerController2 mDpc; + private DisplayPowerControllerHolder mHolder; private Sensor mProxSensor; @Mock @@ -101,36 +101,14 @@ public final class DisplayPowerController2Test { @Mock private DisplayBlanker mDisplayBlankerMock; @Mock - private HighBrightnessModeMetadata mHighBrightnessModeMetadataMock; - @Mock - private LogicalDisplay mLogicalDisplayMock; - @Mock - private DisplayDevice mDisplayDeviceMock; - @Mock private BrightnessTracker mBrightnessTrackerMock; @Mock - private BrightnessSetting mBrightnessSettingMock; - @Mock private WindowManagerPolicy mWindowManagerPolicyMock; @Mock private PowerManager mPowerManagerMock; @Mock private Resources mResourcesMock; @Mock - private DisplayDeviceConfig mDisplayDeviceConfigMock; - @Mock - private DisplayPowerState mDisplayPowerStateMock; - @Mock - private DualRampAnimator mDualRampAnimatorMock; - @Mock - private AutomaticBrightnessController mAutomaticBrightnessControllerMock; - @Mock - private BrightnessMappingStrategy mBrightnessMapperMock; - @Mock - private HysteresisLevels mHysteresisLevelsMock; - @Mock - private WakelockController mWakelockController; - @Mock private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock; @Captor @@ -161,20 +139,9 @@ public final class DisplayPowerController2Test { ColorDisplayService.ColorDisplayServiceInternal.class)); doAnswer((Answer) invocationOnMock -> null).when(BatteryStatsService::getService); - setUpDisplay(DISPLAY_ID, UNIQUE_DISPLAY_ID, mLogicalDisplayMock, mDisplayDeviceMock, - mDisplayDeviceConfigMock); - mProxSensor = setUpProxSensor(); - TestInjector injector = new TestInjector(mDisplayPowerStateMock, mDualRampAnimatorMock, - mAutomaticBrightnessControllerMock, mWakelockController, mBrightnessMapperMock, - mHysteresisLevelsMock); - - mDpc = new DisplayPowerController2( - mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler, - mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock, - mBrightnessTrackerMock, mBrightnessSettingMock, () -> { - }, mHighBrightnessModeMetadataMock); + mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); } @After @@ -185,12 +152,12 @@ public final class DisplayPowerController2Test { @Test public void testReleaseProxSuspendBlockersOnExit() throws Exception { - when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); // send a display power request DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_BRIGHT; dpr.useProximitySensor = true; - mDpc.requestPowerState(dpr, false /* waitForNegativeProximity */); + mHolder.dpc.requestPowerState(dpr, false /* waitForNegativeProximity */); // Run updatePowerState to start listener for the prox sensor advanceTime(1); @@ -202,23 +169,23 @@ public final class DisplayPowerController2Test { advanceTime(1); // two times, one for unfinished business and one for proximity - verify(mWakelockController).acquireWakelock( + verify(mHolder.wakelockController).acquireWakelock( WakelockController.WAKE_LOCK_UNFINISHED_BUSINESS); - verify(mWakelockController).acquireWakelock( + verify(mHolder.wakelockController).acquireWakelock( WakelockController.WAKE_LOCK_PROXIMITY_DEBOUNCE); - mDpc.stop(); + mHolder.dpc.stop(); advanceTime(1); // two times, one for unfinished business and one for proximity - verify(mWakelockController).acquireWakelock( + verify(mHolder.wakelockController).acquireWakelock( WakelockController.WAKE_LOCK_UNFINISHED_BUSINESS); - verify(mWakelockController).acquireWakelock( + verify(mHolder.wakelockController).acquireWakelock( WakelockController.WAKE_LOCK_PROXIMITY_DEBOUNCE); } @Test public void testProximitySensorListenerNotRegisteredForNonDefaultDisplay() { - when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); // send a display power request DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_BRIGHT; @@ -295,43 +262,43 @@ public final class DisplayPowerController2Test { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); // Test different float scale values float leadBrightness = 0.3f; float followerBrightness = 0.4f; float nits = 300; - when(mAutomaticBrightnessControllerMock.convertToNits(leadBrightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(leadBrightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(followerBrightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(leadBrightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(leadBrightness); listener.onBrightnessChanged(leadBrightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(leadBrightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), anyFloat()); - clearInvocations(mDualRampAnimatorMock, followerDpc.animator); + clearInvocations(mHolder.animator, followerDpc.animator); // Test the same float scale value float brightness = 0.6f; nits = 600; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -341,25 +308,25 @@ public final class DisplayPowerController2Test { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(300f); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(300f); when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat())) .thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -369,23 +336,23 @@ public final class DisplayPowerController2Test { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(anyFloat())).thenReturn(-1f); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -395,25 +362,25 @@ public final class DisplayPowerController2Test { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(anyFloat())).thenReturn(-1f); + when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f); when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat())) .thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -426,14 +393,14 @@ public final class DisplayPowerController2Test { SECOND_FOLLOWER_DISPLAY_ID, SECOND_FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); secondFollowerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); // Set the initial brightness on the DPC we're going to remove so we have a fixed value for @@ -449,29 +416,29 @@ public final class DisplayPowerController2Test { anyFloat(), anyFloat()); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); - mDpc.addDisplayBrightnessFollower(secondFollowerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(secondFollowerDpc.dpc); clearInvocations(followerDpc.animator); // Validate both followers are correctly registered and receiving brightness updates float brightness = 0.6f; float nits = 600; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); - clearInvocations(mDualRampAnimatorMock, followerDpc.animator, secondFollowerDpc.animator); + clearInvocations(mHolder.animator, followerDpc.animator, secondFollowerDpc.animator); // Remove the first follower and validate it goes back to its original brightness. - mDpc.removeDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.removeDisplayBrightnessFollower(followerDpc.dpc); advanceTime(1); verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), anyFloat()); @@ -480,15 +447,15 @@ public final class DisplayPowerController2Test { // Change the brightness of the lead display and validate only the second follower responds brightness = 0.7f; nits = 700; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat()); verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -522,7 +489,7 @@ public final class DisplayPowerController2Test { mBrightnessTrackerMock, brightnessSetting, () -> {}, hbmMetadata); - return new DisplayPowerControllerHolder(dpc, brightnessSetting, animator, + return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator, automaticBrightnessController, wakelockController); } @@ -532,16 +499,19 @@ public final class DisplayPowerController2Test { */ private static class DisplayPowerControllerHolder { public final DisplayPowerController2 dpc; + public final DisplayPowerState displayPowerState; public final BrightnessSetting brightnessSetting; public final DualRampAnimator animator; public final AutomaticBrightnessController automaticBrightnessController; public final WakelockController wakelockController; DisplayPowerControllerHolder(DisplayPowerController2 dpc, - BrightnessSetting brightnessSetting, DualRampAnimator animator, + DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, + DualRampAnimator animator, AutomaticBrightnessController automaticBrightnessController, WakelockController wakelockController) { this.dpc = dpc; + this.displayPowerState = displayPowerState; this.brightnessSetting = brightnessSetting; this.animator = animator; this.automaticBrightnessController = automaticBrightnessController; diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java index e39a2e0e6e11b..a8c3e4e9dc7e2 100644 --- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -80,7 +80,7 @@ import java.util.List; @RunWith(AndroidJUnit4.class) public final class DisplayPowerControllerTest { private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY; - private static final String UNIQUE_DISPLAY_ID = "unique_id_test123"; + private static final String UNIQUE_ID = "unique_id_test123"; private static final int FOLLOWER_DISPLAY_ID = DISPLAY_ID + 1; private static final String FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_456"; private static final int SECOND_FOLLOWER_DISPLAY_ID = FOLLOWER_DISPLAY_ID + 1; @@ -91,7 +91,7 @@ public final class DisplayPowerControllerTest { private TestLooper mTestLooper; private Handler mHandler; private Context mContextSpy; - private DisplayPowerController mDpc; + private DisplayPowerControllerHolder mHolder; private Sensor mProxSensor; @Mock @@ -101,34 +101,14 @@ public final class DisplayPowerControllerTest { @Mock private DisplayBlanker mDisplayBlankerMock; @Mock - private LogicalDisplay mLogicalDisplayMock; - @Mock - private DisplayDevice mDisplayDeviceMock; - @Mock - private HighBrightnessModeMetadata mHighBrightnessModeMetadataMock; - @Mock private BrightnessTracker mBrightnessTrackerMock; @Mock - private BrightnessSetting mBrightnessSettingMock; - @Mock private WindowManagerPolicy mWindowManagerPolicyMock; @Mock private PowerManager mPowerManagerMock; @Mock private Resources mResourcesMock; @Mock - private DisplayDeviceConfig mDisplayDeviceConfigMock; - @Mock - private DisplayPowerState mDisplayPowerStateMock; - @Mock - private DualRampAnimator mDualRampAnimatorMock; - @Mock - private AutomaticBrightnessController mAutomaticBrightnessControllerMock; - @Mock - private BrightnessMappingStrategy mBrightnessMapperMock; - @Mock - private HysteresisLevels mHysteresisLevelsMock; - @Mock private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock; @Captor @@ -160,19 +140,9 @@ public final class DisplayPowerControllerTest { ColorDisplayService.ColorDisplayServiceInternal.class)); doAnswer((Answer) invocationOnMock -> null).when(BatteryStatsService::getService); - setUpDisplay(DISPLAY_ID, UNIQUE_DISPLAY_ID, mLogicalDisplayMock, mDisplayDeviceMock, - mDisplayDeviceConfigMock); - mProxSensor = setUpProxSensor(); - TestInjector injector = new TestInjector(mDisplayPowerStateMock, mDualRampAnimatorMock, - mAutomaticBrightnessControllerMock, mBrightnessMapperMock, mHysteresisLevelsMock); - - mDpc = new DisplayPowerController( - mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler, - mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock, - mBrightnessTrackerMock, mBrightnessSettingMock, () -> { - }, mHighBrightnessModeMetadataMock); + mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID); } @After @@ -183,12 +153,12 @@ public final class DisplayPowerControllerTest { @Test public void testReleaseProxSuspendBlockersOnExit() throws Exception { - when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); // send a display power request DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_BRIGHT; dpr.useProximitySensor = true; - mDpc.requestPowerState(dpr, false /* waitForNegativeProximity */); + mHolder.dpc.requestPowerState(dpr, false /* waitForNegativeProximity */); // Run updatePowerState to start listener for the prox sensor advanceTime(1); @@ -201,18 +171,18 @@ public final class DisplayPowerControllerTest { // two times, one for unfinished business and one for proximity verify(mDisplayPowerCallbacksMock).acquireSuspendBlocker( - mDpc.getSuspendBlockerUnfinishedBusinessId(DISPLAY_ID)); + mHolder.dpc.getSuspendBlockerUnfinishedBusinessId(DISPLAY_ID)); verify(mDisplayPowerCallbacksMock).acquireSuspendBlocker( - mDpc.getSuspendBlockerProxDebounceId(DISPLAY_ID)); + mHolder.dpc.getSuspendBlockerProxDebounceId(DISPLAY_ID)); - mDpc.stop(); + mHolder.dpc.stop(); advanceTime(1); // two times, one for unfinished business and one for proximity verify(mDisplayPowerCallbacksMock).releaseSuspendBlocker( - mDpc.getSuspendBlockerUnfinishedBusinessId(DISPLAY_ID)); + mHolder.dpc.getSuspendBlockerUnfinishedBusinessId(DISPLAY_ID)); verify(mDisplayPowerCallbacksMock).releaseSuspendBlocker( - mDpc.getSuspendBlockerProxDebounceId(DISPLAY_ID)); + mHolder.dpc.getSuspendBlockerProxDebounceId(DISPLAY_ID)); } @Test @@ -220,7 +190,7 @@ public final class DisplayPowerControllerTest { DisplayPowerControllerHolder followerDpc = createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); - when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON); + when(mHolder.displayPowerState.getScreenState()).thenReturn(Display.STATE_ON); // send a display power request DisplayPowerRequest dpr = new DisplayPowerRequest(); dpr.policy = DisplayPowerRequest.POLICY_BRIGHT; @@ -295,43 +265,43 @@ public final class DisplayPowerControllerTest { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); // Test different float scale values float leadBrightness = 0.3f; float followerBrightness = 0.4f; float nits = 300; - when(mAutomaticBrightnessControllerMock.convertToNits(leadBrightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(leadBrightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(followerBrightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(leadBrightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(leadBrightness); listener.onBrightnessChanged(leadBrightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(leadBrightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(leadBrightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(followerBrightness), anyFloat(), anyFloat()); - clearInvocations(mDualRampAnimatorMock, followerDpc.animator); + clearInvocations(mHolder.animator, followerDpc.animator); // Test the same float scale value float brightness = 0.6f; nits = 600; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -341,25 +311,25 @@ public final class DisplayPowerControllerTest { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(300f); + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(300f); when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat())) .thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -369,23 +339,23 @@ public final class DisplayPowerControllerTest { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(anyFloat())).thenReturn(-1f); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @@ -395,102 +365,103 @@ public final class DisplayPowerControllerTest { createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.addDisplayBrightnessFollower(followerDpc.dpc); float brightness = 0.3f; - when(mAutomaticBrightnessControllerMock.convertToNits(anyFloat())).thenReturn(-1f); + when(mHolder.automaticBrightnessController.convertToNits(anyFloat())).thenReturn(-1f); when(followerDpc.automaticBrightnessController.convertToFloatScale(anyFloat())) .thenReturn(PowerManager.BRIGHTNESS_INVALID_FLOAT); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } @Test public void testDisplayBrightnessFollowersRemoval() { - DisplayPowerControllerHolder followerDpc = + DisplayPowerControllerHolder followerHolder = createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_DISPLAY_ID); - DisplayPowerControllerHolder secondFollowerDpc = + DisplayPowerControllerHolder secondFollowerHolder = createDisplayPowerController(SECOND_FOLLOWER_DISPLAY_ID, SECOND_FOLLOWER_UNIQUE_DISPLAY_ID); DisplayPowerRequest dpr = new DisplayPowerRequest(); - mDpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); - followerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); - secondFollowerDpc.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + followerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); + secondFollowerHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false); advanceTime(1); // Run updatePowerState ArgumentCaptor listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(mBrightnessSettingMock).registerListener(listenerCaptor.capture()); + verify(mHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener listener = listenerCaptor.getValue(); // Set the initial brightness on the DPC we're going to remove so we have a fixed value for // it to return to. listenerCaptor = ArgumentCaptor.forClass(BrightnessSetting.BrightnessSettingListener.class); - verify(followerDpc.brightnessSetting).registerListener(listenerCaptor.capture()); + verify(followerHolder.brightnessSetting).registerListener(listenerCaptor.capture()); BrightnessSetting.BrightnessSettingListener followerListener = listenerCaptor.getValue(); final float initialFollowerBrightness = 0.3f; - when(followerDpc.brightnessSetting.getBrightness()).thenReturn(initialFollowerBrightness); + when(followerHolder.brightnessSetting.getBrightness()).thenReturn( + initialFollowerBrightness); followerListener.onBrightnessChanged(initialFollowerBrightness); advanceTime(1); - verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), + verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), anyFloat()); - mDpc.addDisplayBrightnessFollower(followerDpc.dpc); - mDpc.addDisplayBrightnessFollower(secondFollowerDpc.dpc); - clearInvocations(followerDpc.animator); + mHolder.dpc.addDisplayBrightnessFollower(followerHolder.dpc); + mHolder.dpc.addDisplayBrightnessFollower(secondFollowerHolder.dpc); + clearInvocations(followerHolder.animator); // Validate both followers are correctly registered and receiving brightness updates float brightness = 0.6f; float nits = 600; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); - when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); + when(followerHolder.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits)) + when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); - verify(followerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); - verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(followerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); - clearInvocations(mDualRampAnimatorMock, followerDpc.animator, secondFollowerDpc.animator); + clearInvocations(mHolder.animator, followerHolder.animator, secondFollowerHolder.animator); // Remove the first follower and validate it goes back to its original brightness. - mDpc.removeDisplayBrightnessFollower(followerDpc.dpc); + mHolder.dpc.removeDisplayBrightnessFollower(followerHolder.dpc); advanceTime(1); - verify(followerDpc.animator).animateTo(eq(initialFollowerBrightness), + verify(followerHolder.animator).animateTo(eq(initialFollowerBrightness), anyFloat(), anyFloat()); - clearInvocations(followerDpc.animator); + clearInvocations(followerHolder.animator); // Change the brightness of the lead display and validate only the second follower responds brightness = 0.7f; nits = 700; - when(mAutomaticBrightnessControllerMock.convertToNits(brightness)).thenReturn(nits); - when(followerDpc.automaticBrightnessController.convertToFloatScale(nits)) + when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits); + when(followerHolder.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(secondFollowerDpc.automaticBrightnessController.convertToFloatScale(nits)) + when(secondFollowerHolder.automaticBrightnessController.convertToFloatScale(nits)) .thenReturn(brightness); - when(mBrightnessSettingMock.getBrightness()).thenReturn(brightness); + when(mHolder.brightnessSetting.getBrightness()).thenReturn(brightness); listener.onBrightnessChanged(brightness); advanceTime(1); // Send messages, run updatePowerState - verify(mDualRampAnimatorMock).animateTo(eq(brightness), anyFloat(), anyFloat()); - verify(followerDpc.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat()); - verify(secondFollowerDpc.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(mHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); + verify(followerHolder.animator, never()).animateTo(anyFloat(), anyFloat(), anyFloat()); + verify(secondFollowerHolder.animator).animateTo(eq(brightness), anyFloat(), anyFloat()); } private DisplayPowerControllerHolder createDisplayPowerController(int displayId, @@ -520,7 +491,7 @@ public final class DisplayPowerControllerTest { mBrightnessTrackerMock, brightnessSetting, () -> {}, hbmMetadata); - return new DisplayPowerControllerHolder(dpc, brightnessSetting, animator, + return new DisplayPowerControllerHolder(dpc, displayPowerState, brightnessSetting, animator, automaticBrightnessController); } @@ -530,14 +501,17 @@ public final class DisplayPowerControllerTest { */ private static class DisplayPowerControllerHolder { public final DisplayPowerController dpc; + public final DisplayPowerState displayPowerState; public final BrightnessSetting brightnessSetting; public final DualRampAnimator animator; public final AutomaticBrightnessController automaticBrightnessController; DisplayPowerControllerHolder(DisplayPowerController dpc, - BrightnessSetting brightnessSetting, DualRampAnimator animator, + DisplayPowerState displayPowerState, BrightnessSetting brightnessSetting, + DualRampAnimator animator, AutomaticBrightnessController automaticBrightnessController) { this.dpc = dpc; + this.displayPowerState = displayPowerState; this.brightnessSetting = brightnessSetting; this.animator = animator; this.automaticBrightnessController = automaticBrightnessController;