Loading services/core/java/com/android/server/display/AutomaticBrightnessController.java +1 −0 Original line number Diff line number Diff line Loading @@ -1057,6 +1057,7 @@ class AutomaticBrightnessController { public void recalculateSplines(boolean applyAdjustment, float[] adjustment) { mCurrentBrightnessMapper.recalculateSplines(applyAdjustment, adjustment); updateAutoBrightness(true /*sendUpdate*/, false /*isManuallySet*/); } private final class AutomaticBrightnessHandler extends Handler { Loading services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java +59 −50 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import android.hardware.Sensor; import android.hardware.SensorEventListener; import android.hardware.SensorManager; Loading Loading @@ -73,6 +74,7 @@ public class AutomaticBrightnessControllerTest { private TestLooper mTestLooper; private Context mContext; private AutomaticBrightnessController mController; private Sensor mLightSensor; @Mock SensorManager mSensorManager; @Mock BrightnessMappingStrategy mBrightnessMappingStrategy; Loading @@ -84,12 +86,14 @@ public class AutomaticBrightnessControllerTest { @Mock BrightnessThrottler mBrightnessThrottler; @Before public void setUp() { public void setUp() throws Exception { // Share classloader to allow package private access. System.setProperty("dexmaker.share_classloader", "true"); MockitoAnnotations.initMocks(this); mLightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mContext = InstrumentationRegistry.getContext(); mController = setupController(mLightSensor); } @After Loading @@ -101,11 +105,6 @@ public class AutomaticBrightnessControllerTest { } } private void advanceTime(long timeMs) { mClock.fastForward(timeMs); mTestLooper.dispatchAll(); } private AutomaticBrightnessController setupController(Sensor lightSensor) { mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); Loading Loading @@ -150,12 +149,9 @@ public class AutomaticBrightnessControllerTest { @Test public void testNoHysteresisAtMinBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -177,7 +173,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(1.0f); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux1)); assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); // Set up system to return 0.0f (minimum possible brightness) as a brightness value Loading @@ -191,18 +187,15 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness2); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux2)); assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testNoHysteresisAtMaxBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -223,7 +216,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(1.1f); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux1)); assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); Loading @@ -238,23 +231,20 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness2); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux2)); assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testUserAddUserDataPoint() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); // Sensor reads 1000 lux, listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); // User sets brightness to 100 mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, Loading @@ -266,18 +256,43 @@ public class AutomaticBrightnessControllerTest { } @Test public void testSwitchToIdleMappingStrategy() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); public void testRecalculateSplines() throws Exception { // Enabling the light sensor, and setting the ambient lux to 1000 ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); //Setting the brightnessFloat to 0.5f float currentBrightnessFloat = 0.5f; when(mBrightnessMappingStrategy.getBrightness(1000, null, ApplicationInfo.CATEGORY_UNDEFINED)).thenReturn(currentBrightnessFloat); mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, currentBrightnessFloat /* brightness */, false /* userChangedBrightness */, 0 /* adjustment */, false /* userChanged */, DisplayPowerRequest.POLICY_BRIGHT); // Adjusting spline, and accordingly remapping the current 0.5f brightnessFloat to 0.3f float updatedBrightnessFloat = 0.3f; when(mBrightnessMappingStrategy.getBrightness(1000, null, ApplicationInfo.CATEGORY_UNDEFINED)).thenReturn(updatedBrightnessFloat); float[] adjustments = new float[]{0.2f, 0.5f}; mController.recalculateSplines(true, adjustments); verify(mBrightnessMappingStrategy).recalculateSplines(true, adjustments); assertEquals(mController.getAutomaticScreenBrightness(), updatedBrightnessFloat, EPSILON); } @Test public void testSwitchToIdleMappingStrategy() throws Exception { ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); // Sensor reads 1000 lux, listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); // User sets brightness to 100 mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, Loading Loading @@ -307,51 +322,48 @@ public class AutomaticBrightnessControllerTest { @Test public void testAmbientLightHorizon() throws Exception { // create abc Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); long increment = 500; // set autobrightness to low // t = 0 listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); // t = 500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); // t = 1000 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 1500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 2000 // ensure that our reading is at 0. mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 2500 // first 10000 lux sensor event reading mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 3000 // lux reading should still not yet be 10000. mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); Loading @@ -360,39 +372,39 @@ public class AutomaticBrightnessControllerTest { // lux has been high (10000) for 1000ms. // lux reading should be 10000 // short horizon (ambient lux) is high, long horizon is still not high listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 4000 // stay high mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 4500 Mockito.clearInvocations(mBrightnessMappingStrategy); mClock.fastForward(increment); // short horizon is high, long horizon is high too listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); verify(mBrightnessMappingStrategy, times(1)).getBrightness(10000, null, -1); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 5000 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 5500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 6000 mClock.fastForward(increment); // ambient lux goes to 0 listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); } Loading Loading @@ -427,12 +439,9 @@ public class AutomaticBrightnessControllerTest { @Test public void testBrightnessGetsThrottled() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -447,7 +456,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness); // Sensor reads 100 lux. We should get max brightness. listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux)); assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getAutomaticScreenBrightness(), 0.0f); // Apply throttling and notify ABC (simulates DisplayPowerController#updatePowerState()) Loading Loading
services/core/java/com/android/server/display/AutomaticBrightnessController.java +1 −0 Original line number Diff line number Diff line Loading @@ -1057,6 +1057,7 @@ class AutomaticBrightnessController { public void recalculateSplines(boolean applyAdjustment, float[] adjustment) { mCurrentBrightnessMapper.recalculateSplines(applyAdjustment, adjustment); updateAutoBrightness(true /*sendUpdate*/, false /*isManuallySet*/); } private final class AutomaticBrightnessHandler extends Handler { Loading
services/tests/servicestests/src/com/android/server/display/AutomaticBrightnessControllerTest.java +59 −50 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.ApplicationInfo; import android.hardware.Sensor; import android.hardware.SensorEventListener; import android.hardware.SensorManager; Loading Loading @@ -73,6 +74,7 @@ public class AutomaticBrightnessControllerTest { private TestLooper mTestLooper; private Context mContext; private AutomaticBrightnessController mController; private Sensor mLightSensor; @Mock SensorManager mSensorManager; @Mock BrightnessMappingStrategy mBrightnessMappingStrategy; Loading @@ -84,12 +86,14 @@ public class AutomaticBrightnessControllerTest { @Mock BrightnessThrottler mBrightnessThrottler; @Before public void setUp() { public void setUp() throws Exception { // Share classloader to allow package private access. System.setProperty("dexmaker.share_classloader", "true"); MockitoAnnotations.initMocks(this); mLightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mContext = InstrumentationRegistry.getContext(); mController = setupController(mLightSensor); } @After Loading @@ -101,11 +105,6 @@ public class AutomaticBrightnessControllerTest { } } private void advanceTime(long timeMs) { mClock.fastForward(timeMs); mTestLooper.dispatchAll(); } private AutomaticBrightnessController setupController(Sensor lightSensor) { mClock = new OffsettableClock.Stopped(); mTestLooper = new TestLooper(mClock::now); Loading Loading @@ -150,12 +149,9 @@ public class AutomaticBrightnessControllerTest { @Test public void testNoHysteresisAtMinBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -177,7 +173,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(1.0f); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux1)); assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); // Set up system to return 0.0f (minimum possible brightness) as a brightness value Loading @@ -191,18 +187,15 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness2); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux2)); assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testNoHysteresisAtMaxBrightness() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -223,7 +216,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(1.1f); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux1)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux1)); assertEquals(normalizedBrightness1, mController.getAutomaticScreenBrightness(), 0.001f); Loading @@ -238,23 +231,20 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness2); // Send new sensor value and verify listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux2)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux2)); assertEquals(normalizedBrightness2, mController.getAutomaticScreenBrightness(), 0.001f); } @Test public void testUserAddUserDataPoint() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); // Sensor reads 1000 lux, listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); // User sets brightness to 100 mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, Loading @@ -266,18 +256,43 @@ public class AutomaticBrightnessControllerTest { } @Test public void testSwitchToIdleMappingStrategy() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); public void testRecalculateSplines() throws Exception { // Enabling the light sensor, and setting the ambient lux to 1000 ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); //Setting the brightnessFloat to 0.5f float currentBrightnessFloat = 0.5f; when(mBrightnessMappingStrategy.getBrightness(1000, null, ApplicationInfo.CATEGORY_UNDEFINED)).thenReturn(currentBrightnessFloat); mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, currentBrightnessFloat /* brightness */, false /* userChangedBrightness */, 0 /* adjustment */, false /* userChanged */, DisplayPowerRequest.POLICY_BRIGHT); // Adjusting spline, and accordingly remapping the current 0.5f brightnessFloat to 0.3f float updatedBrightnessFloat = 0.3f; when(mBrightnessMappingStrategy.getBrightness(1000, null, ApplicationInfo.CATEGORY_UNDEFINED)).thenReturn(updatedBrightnessFloat); float[] adjustments = new float[]{0.2f, 0.5f}; mController.recalculateSplines(true, adjustments); verify(mBrightnessMappingStrategy).recalculateSplines(true, adjustments); assertEquals(mController.getAutomaticScreenBrightness(), updatedBrightnessFloat, EPSILON); } @Test public void testSwitchToIdleMappingStrategy() throws Exception { ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); // Sensor reads 1000 lux, listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 1000)); // User sets brightness to 100 mController.configure(AUTO_BRIGHTNESS_ENABLED, null /* configuration */, Loading Loading @@ -307,51 +322,48 @@ public class AutomaticBrightnessControllerTest { @Test public void testAmbientLightHorizon() throws Exception { // create abc Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); long increment = 500; // set autobrightness to low // t = 0 listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); // t = 500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); // t = 1000 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 1500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 2000 // ensure that our reading is at 0. mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); // t = 2500 // first 10000 lux sensor event reading mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 3000 // lux reading should still not yet be 10000. mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); Loading @@ -360,39 +372,39 @@ public class AutomaticBrightnessControllerTest { // lux has been high (10000) for 1000ms. // lux reading should be 10000 // short horizon (ambient lux) is high, long horizon is still not high listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 4000 // stay high mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 4500 Mockito.clearInvocations(mBrightnessMappingStrategy); mClock.fastForward(increment); // short horizon is high, long horizon is high too listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 10000)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 10000)); verify(mBrightnessMappingStrategy, times(1)).getBrightness(10000, null, -1); assertEquals(10000.0f, mController.getAmbientLux(), EPSILON); // t = 5000 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 5500 mClock.fastForward(increment); listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertTrue(mController.getAmbientLux() > 0.0f); assertTrue(mController.getAmbientLux() < 10000.0f); // t = 6000 mClock.fastForward(increment); // ambient lux goes to 0 listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 0)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, 0)); assertEquals(0.0f, mController.getAmbientLux(), EPSILON); } Loading Loading @@ -427,12 +439,9 @@ public class AutomaticBrightnessControllerTest { @Test public void testBrightnessGetsThrottled() throws Exception { Sensor lightSensor = TestUtils.createSensor(Sensor.TYPE_LIGHT, "Light Sensor"); mController = setupController(lightSensor); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(lightSensor), verify(mSensorManager).registerListener(listenerCaptor.capture(), eq(mLightSensor), eq(INITIAL_LIGHT_SENSOR_RATE * 1000), any(Handler.class)); SensorEventListener listener = listenerCaptor.getValue(); Loading @@ -447,7 +456,7 @@ public class AutomaticBrightnessControllerTest { .thenReturn(normalizedBrightness); // Sensor reads 100 lux. We should get max brightness. listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, (int) lux)); listener.onSensorChanged(TestUtils.createSensorEvent(mLightSensor, (int) lux)); assertEquals(BRIGHTNESS_MAX_FLOAT, mController.getAutomaticScreenBrightness(), 0.0f); // Apply throttling and notify ABC (simulates DisplayPowerController#updatePowerState()) Loading