Loading packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +46 −7 Original line number Diff line number Diff line Loading @@ -16,11 +16,15 @@ package com.android.systemui.doze; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; import android.os.Handler; import android.os.Trace; import android.os.UserHandle; Loading @@ -31,7 +35,12 @@ import com.android.internal.annotations.VisibleForTesting; /** * Controls the screen brightness when dozing. */ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener { public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachine.Part, SensorEventListener { protected static final String ACTION_AOD_BRIGHTNESS = "com.android.systemui.doze.AOD_BRIGHTNESS"; protected static final String BRIGHTNESS_BUCKET = "brightness_bucket"; private final Context mContext; private final DozeMachine.Service mDozeService; private final DozeHost mDozeHost; Loading @@ -40,36 +49,52 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen private final Sensor mLightSensor; private final int[] mSensorToBrightness; private final int[] mSensorToScrimOpacity; private final boolean mDebuggable; private boolean mRegistered; private int mDefaultDozeBrightness; private boolean mPaused = false; private int mLastSensorValue = -1; /** * Debug value used for emulating various display brightness buckets: * * {@code am broadcast -p com.android.systemui -a com.android.systemui.doze.AOD_BRIGHTNESS * --ei brightness_bucket 1} */ private int mDebugBrightnessBucket = -1; @VisibleForTesting public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, DozeHost host, Handler handler, int defaultDozeBrightness, int[] sensorToBrightness, int[] sensorToScrimOpacity) { int[] sensorToScrimOpacity, boolean debuggable) { mContext = context; mDozeService = service; mSensorManager = sensorManager; mLightSensor = lightSensor; mDozeHost = host; mHandler = handler; mDebuggable = debuggable; mDefaultDozeBrightness = defaultDozeBrightness; mSensorToBrightness = sensorToBrightness; mSensorToScrimOpacity = sensorToScrimOpacity; if (mDebuggable) { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_AOD_BRIGHTNESS); mContext.registerReceiverAsUser(this, UserHandle.ALL, filter, null, null); } } @VisibleForTesting public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, DozeHost host, Handler handler, AlwaysOnDisplayPolicy policy) { this(context, service, sensorManager, lightSensor, host, handler, context.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessDoze), policy.screenBrightnessArray, policy.dimmingScrimArray); policy.screenBrightnessArray, policy.dimmingScrimArray, Build.IS_DEBUGGABLE); } @Override Loading @@ -87,7 +112,7 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen resetBrightnessToDefault(); break; case FINISH: setLightSensorEnabled(false); onDestroy(); break; } if (newState != DozeMachine.State.FINISH) { Loading @@ -95,6 +120,13 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen } } private void onDestroy() { setLightSensorEnabled(false); if (mDebuggable) { mContext.unregisterReceiver(this); } } @Override public void onSensorChanged(SensorEvent event) { Trace.beginSection("DozeScreenBrightness.onSensorChanged" + event.values[0]); Loading @@ -110,7 +142,9 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen private void updateBrightnessAndReady() { if (mRegistered) { int brightness = computeBrightness(mLastSensorValue); int sensorValue = mDebugBrightnessBucket == -1 ? mLastSensorValue : mDebugBrightnessBucket; int brightness = computeBrightness(sensorValue); boolean brightnessReady = brightness > 0; if (brightnessReady) { mDozeService.setDozeScreenBrightness(clampToUserSetting(brightness)); Loading @@ -125,7 +159,7 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen scrimOpacity = 255; } else if (brightnessReady) { // Only unblank scrim once brightness is ready. scrimOpacity = computeScrimOpacity(mLastSensorValue); scrimOpacity = computeScrimOpacity(sensorValue); } if (scrimOpacity >= 0) { mDozeHost.setAodDimmingScrim(scrimOpacity / 255f); Loading Loading @@ -184,4 +218,9 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen } } @Override public void onReceive(Context context, Intent intent) { mDebugBrightnessBucket = intent.getIntExtra(BRIGHTNESS_BUCKET, -1); updateBrightnessAndReady(); } } packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +18 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import android.content.Intent; import android.os.PowerManager; import android.os.UserHandle; import android.provider.Settings; Loading Loading @@ -71,7 +72,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mSensor = mSensorManager.getFakeLightSensor(); mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, mSensor.getSensor(), mHostFake, null /* handler */, DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY); DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY, true /* debuggable */); } @Test Loading @@ -92,6 +94,19 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { assertEquals(3, mServiceFake.screenBrightness); } @Test public void testAod_usesDebugValue() throws Exception { mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); Intent intent = new Intent(DozeScreenBrightness.ACTION_AOD_BRIGHTNESS); intent.putExtra(DozeScreenBrightness.BRIGHTNESS_BUCKET, 1); mScreen.onReceive(mContext, intent); mSensor.sendSensorEvent(3); assertEquals(1, mServiceFake.screenBrightness); } @Test public void testAod_usesLightSensorRespectingUserSetting() throws Exception { int maxBrightness = 3; Loading Loading @@ -160,7 +175,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { public void testNullSensor() throws Exception { mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, null /* sensor */, mHostFake, null /* handler */, DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY); DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY, true /* debuggable */); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +46 −7 Original line number Diff line number Diff line Loading @@ -16,11 +16,15 @@ package com.android.systemui.doze; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; import android.os.Handler; import android.os.Trace; import android.os.UserHandle; Loading @@ -31,7 +35,12 @@ import com.android.internal.annotations.VisibleForTesting; /** * Controls the screen brightness when dozing. */ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener { public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachine.Part, SensorEventListener { protected static final String ACTION_AOD_BRIGHTNESS = "com.android.systemui.doze.AOD_BRIGHTNESS"; protected static final String BRIGHTNESS_BUCKET = "brightness_bucket"; private final Context mContext; private final DozeMachine.Service mDozeService; private final DozeHost mDozeHost; Loading @@ -40,36 +49,52 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen private final Sensor mLightSensor; private final int[] mSensorToBrightness; private final int[] mSensorToScrimOpacity; private final boolean mDebuggable; private boolean mRegistered; private int mDefaultDozeBrightness; private boolean mPaused = false; private int mLastSensorValue = -1; /** * Debug value used for emulating various display brightness buckets: * * {@code am broadcast -p com.android.systemui -a com.android.systemui.doze.AOD_BRIGHTNESS * --ei brightness_bucket 1} */ private int mDebugBrightnessBucket = -1; @VisibleForTesting public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, DozeHost host, Handler handler, int defaultDozeBrightness, int[] sensorToBrightness, int[] sensorToScrimOpacity) { int[] sensorToScrimOpacity, boolean debuggable) { mContext = context; mDozeService = service; mSensorManager = sensorManager; mLightSensor = lightSensor; mDozeHost = host; mHandler = handler; mDebuggable = debuggable; mDefaultDozeBrightness = defaultDozeBrightness; mSensorToBrightness = sensorToBrightness; mSensorToScrimOpacity = sensorToScrimOpacity; if (mDebuggable) { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_AOD_BRIGHTNESS); mContext.registerReceiverAsUser(this, UserHandle.ALL, filter, null, null); } } @VisibleForTesting public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, DozeHost host, Handler handler, AlwaysOnDisplayPolicy policy) { this(context, service, sensorManager, lightSensor, host, handler, context.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessDoze), policy.screenBrightnessArray, policy.dimmingScrimArray); policy.screenBrightnessArray, policy.dimmingScrimArray, Build.IS_DEBUGGABLE); } @Override Loading @@ -87,7 +112,7 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen resetBrightnessToDefault(); break; case FINISH: setLightSensorEnabled(false); onDestroy(); break; } if (newState != DozeMachine.State.FINISH) { Loading @@ -95,6 +120,13 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen } } private void onDestroy() { setLightSensorEnabled(false); if (mDebuggable) { mContext.unregisterReceiver(this); } } @Override public void onSensorChanged(SensorEvent event) { Trace.beginSection("DozeScreenBrightness.onSensorChanged" + event.values[0]); Loading @@ -110,7 +142,9 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen private void updateBrightnessAndReady() { if (mRegistered) { int brightness = computeBrightness(mLastSensorValue); int sensorValue = mDebugBrightnessBucket == -1 ? mLastSensorValue : mDebugBrightnessBucket; int brightness = computeBrightness(sensorValue); boolean brightnessReady = brightness > 0; if (brightnessReady) { mDozeService.setDozeScreenBrightness(clampToUserSetting(brightness)); Loading @@ -125,7 +159,7 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen scrimOpacity = 255; } else if (brightnessReady) { // Only unblank scrim once brightness is ready. scrimOpacity = computeScrimOpacity(mLastSensorValue); scrimOpacity = computeScrimOpacity(sensorValue); } if (scrimOpacity >= 0) { mDozeHost.setAodDimmingScrim(scrimOpacity / 255f); Loading Loading @@ -184,4 +218,9 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen } } @Override public void onReceive(Context context, Intent intent) { mDebugBrightnessBucket = intent.getIntExtra(BRIGHTNESS_BUCKET, -1); updateBrightnessAndReady(); } }
packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +18 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import android.content.Intent; import android.os.PowerManager; import android.os.UserHandle; import android.provider.Settings; Loading Loading @@ -71,7 +72,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mSensor = mSensorManager.getFakeLightSensor(); mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, mSensor.getSensor(), mHostFake, null /* handler */, DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY); DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY, true /* debuggable */); } @Test Loading @@ -92,6 +94,19 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { assertEquals(3, mServiceFake.screenBrightness); } @Test public void testAod_usesDebugValue() throws Exception { mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); Intent intent = new Intent(DozeScreenBrightness.ACTION_AOD_BRIGHTNESS); intent.putExtra(DozeScreenBrightness.BRIGHTNESS_BUCKET, 1); mScreen.onReceive(mContext, intent); mSensor.sendSensorEvent(3); assertEquals(1, mServiceFake.screenBrightness); } @Test public void testAod_usesLightSensorRespectingUserSetting() throws Exception { int maxBrightness = 3; Loading Loading @@ -160,7 +175,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { public void testNullSensor() throws Exception { mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, null /* sensor */, mHostFake, null /* handler */, DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY); DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY, true /* debuggable */); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); Loading