diff options
7 files changed, 67 insertions, 10 deletions
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 5917dc56124b..506c294d74fa 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -277,6 +277,18 @@ <item>28</item> <!-- 4: SUN --> </integer-array> + <!-- Doze: Table that translates sensor values from the doze_brightness_sensor_type sensor + to an opacity value for a black scrim that is overlayed in AOD1. + Valid range is from 0 (transparent) to 255 (opaque). + -1 means keeping the current opacity. --> + <integer-array name="config_doze_brightness_sensor_to_scrim_opacity"> + <item>-1</item> <!-- 0: OFF --> + <item>0</item> <!-- 1: NIGHT --> + <item>0</item> <!-- 2: LOW --> + <item>0</item> <!-- 3: HIGH --> + <item>0</item> <!-- 4: SUN --> + </integer-array> + <!-- Doze: whether the double tap sensor reports 2D touch coordinates --> <bool name="doze_double_tap_reports_touch_coordinates">false</bool> diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java index cbdabf5de876..302bc2d38f64 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java @@ -65,7 +65,7 @@ public class DozeFactory { handler, wakeLock, machine), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeScreenState(wrappedService), - createDozeScreenBrightness(context, wrappedService, sensorManager, handler), + createDozeScreenBrightness(context, wrappedService, sensorManager, host, handler), }); return machine; @@ -76,10 +76,11 @@ public class DozeFactory { } private DozeMachine.Part createDozeScreenBrightness(Context context, - DozeMachine.Service service, SensorManager sensorManager, Handler handler) { + DozeMachine.Service service, SensorManager sensorManager, DozeHost host, + Handler handler) { Sensor sensor = DozeSensors.findSensorWithType(sensorManager, context.getString(R.string.doze_brightness_sensor_type)); - return new DozeScreenBrightness(context, service, sensorManager, sensor, handler); + return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler); } private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java index 9b97634d7419..7db118d7fb1c 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java @@ -42,6 +42,7 @@ public interface DozeHost { void onDoubleTap(float x, float y); + default void setAodDimmingScrim(float scrimOpacity) {} void setDozeScreenBrightness(int value); void onIgnoreTouchWhilePulsing(boolean ignore); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java index 32baf9413314..30420529df56 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java @@ -32,22 +32,28 @@ import com.android.systemui.R; public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener { private final Context mContext; private final DozeMachine.Service mDozeService; + private final DozeHost mDozeHost; private final Handler mHandler; private final SensorManager mSensorManager; private final Sensor mLightSensor; private final int[] mSensorToBrightness; + private final int[] mSensorToScrimOpacity; private boolean mRegistered; public DozeScreenBrightness(Context context, DozeMachine.Service service, - SensorManager sensorManager, Sensor lightSensor, Handler handler) { + SensorManager sensorManager, Sensor lightSensor, DozeHost host, + Handler handler) { mContext = context; mDozeService = service; mSensorManager = sensorManager; mLightSensor = lightSensor; + mDozeHost = host; mHandler = handler; mSensorToBrightness = context.getResources().getIntArray( R.array.config_doze_brightness_sensor_to_brightness); + mSensorToScrimOpacity = context.getResources().getIntArray( + R.array.config_doze_brightness_sensor_to_scrim_opacity); } @Override @@ -74,11 +80,24 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen @Override public void onSensorChanged(SensorEvent event) { if (mRegistered) { - int brightness = computeBrightness((int) event.values[0]); + int sensorValue = (int) event.values[0]; + int brightness = computeBrightness(sensorValue); if (brightness > 0) { mDozeService.setDozeScreenBrightness(brightness); } + + int scrimOpacity = computeScrimOpacity(sensorValue); + if (scrimOpacity >= 0) { + mDozeHost.setAodDimmingScrim(scrimOpacity / 255f); + } + } + } + + private int computeScrimOpacity(int sensorValue) { + if (sensorValue < 0 || sensorValue >= mSensorToScrimOpacity.length) { + return -1; } + return mSensorToScrimOpacity[sensorValue]; } private int computeBrightness(int sensorValue) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java index 2283c130190c..3794ac68b836 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java @@ -56,6 +56,8 @@ public class DozeScrimController { private boolean mWakeAndUnlocking; private boolean mFullyPulsing; + private float mAodFrontScrimOpacity = 0; + public DozeScrimController(ScrimController scrimController, Context context) { mContext = context; mScrimController = scrimController; @@ -70,7 +72,8 @@ public class DozeScrimController { mDozingAborted = false; abortAnimations(); mScrimController.setDozeBehindAlpha(1f); - mScrimController.setDozeInFrontAlpha(mDozeParameters.getAlwaysOn() ? 0f : 1f); + mScrimController.setDozeInFrontAlpha( + mDozeParameters.getAlwaysOn() ? mAodFrontScrimOpacity : 1f); } else { cancelPulsing(); if (animate) { @@ -88,6 +91,19 @@ public class DozeScrimController { } } + /** + * Set the opacity of the front scrim when showing AOD1 + * + * Used to emulate lower brightness values than the hardware supports natively. + */ + public void setAodDimmingScrim(float scrimOpacity) { + mAodFrontScrimOpacity = scrimOpacity; + if (mDozing && !isPulsing() && !mDozingAborted && !mWakeAndUnlocking + && mDozeParameters.getAlwaysOn()) { + mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity); + } + } + public void setWakeAndUnlocking() { // Immediately abort the doze scrims in case of wake-and-unlock // for pulsing so the Keyguard fade-out animation scrim can take over. @@ -126,7 +142,8 @@ public class DozeScrimController { if (mDozing && !mWakeAndUnlocking) { mScrimController.setDozeBehindAlpha(1f); mScrimController.setDozeInFrontAlpha( - mDozeParameters.getAlwaysOn() && !mDozingAborted ? 0f : 1f); + mDozeParameters.getAlwaysOn() && !mDozingAborted ? + mAodFrontScrimOpacity : 1f); } } @@ -337,7 +354,7 @@ public class DozeScrimController { // Signal that the pulse is all finished so we can turn the screen off now. pulseFinished(); if (mDozeParameters.getAlwaysOn()) { - mScrimController.setDozeInFrontAlpha(0); + mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity); } } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index e95b1767ade6..2a55e2ec2247 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -5566,6 +5566,11 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarWindowManager.setDozeScreenBrightness(value); } + @Override + public void setAodDimmingScrim(float scrimOpacity) { + mDozeScrimController.setAodDimmingScrim(scrimOpacity); + } + public void dispatchDoubleTap(float viewX, float viewY) { dispatchTap(mAmbientIndicationContainer, viewX, viewY); dispatchTap(mAmbientIndicationContainer, viewX, viewY); diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java index fe3221af418c..c2758068a4ed 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java @@ -51,14 +51,16 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { DozeScreenBrightness mScreen; FakeSensorManager.FakeGenericSensor mSensor; FakeSensorManager mSensorManager; + DozeHostFake mHostFake; @Before public void setUp() throws Exception { mServiceFake = new DozeServiceFake(); + mHostFake = new DozeHostFake(); mSensorManager = new FakeSensorManager(mContext); mSensor = mSensorManager.getFakeLightSensor(); mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, - mSensor.getSensor(), null /* handler */); + mSensor.getSensor(), mHostFake, null /* handler */); } @Test @@ -133,7 +135,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { @Test public void testNullSensor() throws Exception { mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager, - null /* sensor */, null /* handler */); + null /* sensor */, mHostFake, null /* handler */); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); |