Merge "AOD: Add support for dimming in software" into oc-dr1-dev
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,13 +80,26 @@ 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) {
|
||||
if (sensorValue < 0 || sensorValue >= mSensorToBrightness.length) {
|
||||
return -1;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5555,6 +5555,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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user