Merge "AOD: Add support for dimming in software" into oc-dr1-dev am: b2107c9b56
am: 5658d14b81
Change-Id: If5d22e92e86acdd96f881048bfa25af1c4e3bbe5
This commit is contained in:
@@ -277,6 +277,18 @@
|
|||||||
<item>28</item> <!-- 4: SUN -->
|
<item>28</item> <!-- 4: SUN -->
|
||||||
</integer-array>
|
</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 -->
|
<!-- Doze: whether the double tap sensor reports 2D touch coordinates -->
|
||||||
<bool name="doze_double_tap_reports_touch_coordinates">false</bool>
|
<bool name="doze_double_tap_reports_touch_coordinates">false</bool>
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class DozeFactory {
|
|||||||
handler, wakeLock, machine),
|
handler, wakeLock, machine),
|
||||||
createDozeUi(context, host, wakeLock, machine, handler, alarmManager),
|
createDozeUi(context, host, wakeLock, machine, handler, alarmManager),
|
||||||
createDozeScreenState(wrappedService),
|
createDozeScreenState(wrappedService),
|
||||||
createDozeScreenBrightness(context, wrappedService, sensorManager, handler),
|
createDozeScreenBrightness(context, wrappedService, sensorManager, host, handler),
|
||||||
});
|
});
|
||||||
|
|
||||||
return machine;
|
return machine;
|
||||||
@@ -76,10 +76,11 @@ public class DozeFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DozeMachine.Part createDozeScreenBrightness(Context context,
|
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,
|
Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
|
||||||
context.getString(R.string.doze_brightness_sensor_type));
|
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,
|
private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public interface DozeHost {
|
|||||||
|
|
||||||
void onDoubleTap(float x, float y);
|
void onDoubleTap(float x, float y);
|
||||||
|
|
||||||
|
default void setAodDimmingScrim(float scrimOpacity) {}
|
||||||
void setDozeScreenBrightness(int value);
|
void setDozeScreenBrightness(int value);
|
||||||
|
|
||||||
void onIgnoreTouchWhilePulsing(boolean ignore);
|
void onIgnoreTouchWhilePulsing(boolean ignore);
|
||||||
|
|||||||
@@ -32,22 +32,28 @@ import com.android.systemui.R;
|
|||||||
public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener {
|
public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener {
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final DozeMachine.Service mDozeService;
|
private final DozeMachine.Service mDozeService;
|
||||||
|
private final DozeHost mDozeHost;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final SensorManager mSensorManager;
|
private final SensorManager mSensorManager;
|
||||||
private final Sensor mLightSensor;
|
private final Sensor mLightSensor;
|
||||||
private final int[] mSensorToBrightness;
|
private final int[] mSensorToBrightness;
|
||||||
|
private final int[] mSensorToScrimOpacity;
|
||||||
private boolean mRegistered;
|
private boolean mRegistered;
|
||||||
|
|
||||||
public DozeScreenBrightness(Context context, DozeMachine.Service service,
|
public DozeScreenBrightness(Context context, DozeMachine.Service service,
|
||||||
SensorManager sensorManager, Sensor lightSensor, Handler handler) {
|
SensorManager sensorManager, Sensor lightSensor, DozeHost host,
|
||||||
|
Handler handler) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDozeService = service;
|
mDozeService = service;
|
||||||
mSensorManager = sensorManager;
|
mSensorManager = sensorManager;
|
||||||
mLightSensor = lightSensor;
|
mLightSensor = lightSensor;
|
||||||
|
mDozeHost = host;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
|
|
||||||
mSensorToBrightness = context.getResources().getIntArray(
|
mSensorToBrightness = context.getResources().getIntArray(
|
||||||
R.array.config_doze_brightness_sensor_to_brightness);
|
R.array.config_doze_brightness_sensor_to_brightness);
|
||||||
|
mSensorToScrimOpacity = context.getResources().getIntArray(
|
||||||
|
R.array.config_doze_brightness_sensor_to_scrim_opacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -74,13 +80,26 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen
|
|||||||
@Override
|
@Override
|
||||||
public void onSensorChanged(SensorEvent event) {
|
public void onSensorChanged(SensorEvent event) {
|
||||||
if (mRegistered) {
|
if (mRegistered) {
|
||||||
int brightness = computeBrightness((int) event.values[0]);
|
int sensorValue = (int) event.values[0];
|
||||||
|
int brightness = computeBrightness(sensorValue);
|
||||||
if (brightness > 0) {
|
if (brightness > 0) {
|
||||||
mDozeService.setDozeScreenBrightness(brightness);
|
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) {
|
private int computeBrightness(int sensorValue) {
|
||||||
if (sensorValue < 0 || sensorValue >= mSensorToBrightness.length) {
|
if (sensorValue < 0 || sensorValue >= mSensorToBrightness.length) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ public class DozeScrimController {
|
|||||||
private boolean mWakeAndUnlocking;
|
private boolean mWakeAndUnlocking;
|
||||||
private boolean mFullyPulsing;
|
private boolean mFullyPulsing;
|
||||||
|
|
||||||
|
private float mAodFrontScrimOpacity = 0;
|
||||||
|
|
||||||
public DozeScrimController(ScrimController scrimController, Context context) {
|
public DozeScrimController(ScrimController scrimController, Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mScrimController = scrimController;
|
mScrimController = scrimController;
|
||||||
@@ -70,7 +72,8 @@ public class DozeScrimController {
|
|||||||
mDozingAborted = false;
|
mDozingAborted = false;
|
||||||
abortAnimations();
|
abortAnimations();
|
||||||
mScrimController.setDozeBehindAlpha(1f);
|
mScrimController.setDozeBehindAlpha(1f);
|
||||||
mScrimController.setDozeInFrontAlpha(mDozeParameters.getAlwaysOn() ? 0f : 1f);
|
mScrimController.setDozeInFrontAlpha(
|
||||||
|
mDozeParameters.getAlwaysOn() ? mAodFrontScrimOpacity : 1f);
|
||||||
} else {
|
} else {
|
||||||
cancelPulsing();
|
cancelPulsing();
|
||||||
if (animate) {
|
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() {
|
public void setWakeAndUnlocking() {
|
||||||
// Immediately abort the doze scrims in case of wake-and-unlock
|
// Immediately abort the doze scrims in case of wake-and-unlock
|
||||||
// for pulsing so the Keyguard fade-out animation scrim can take over.
|
// for pulsing so the Keyguard fade-out animation scrim can take over.
|
||||||
@@ -126,7 +142,8 @@ public class DozeScrimController {
|
|||||||
if (mDozing && !mWakeAndUnlocking) {
|
if (mDozing && !mWakeAndUnlocking) {
|
||||||
mScrimController.setDozeBehindAlpha(1f);
|
mScrimController.setDozeBehindAlpha(1f);
|
||||||
mScrimController.setDozeInFrontAlpha(
|
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.
|
// Signal that the pulse is all finished so we can turn the screen off now.
|
||||||
pulseFinished();
|
pulseFinished();
|
||||||
if (mDozeParameters.getAlwaysOn()) {
|
if (mDozeParameters.getAlwaysOn()) {
|
||||||
mScrimController.setDozeInFrontAlpha(0);
|
mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5566,6 +5566,11 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
mStatusBarWindowManager.setDozeScreenBrightness(value);
|
mStatusBarWindowManager.setDozeScreenBrightness(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAodDimmingScrim(float scrimOpacity) {
|
||||||
|
mDozeScrimController.setAodDimmingScrim(scrimOpacity);
|
||||||
|
}
|
||||||
|
|
||||||
public void dispatchDoubleTap(float viewX, float viewY) {
|
public void dispatchDoubleTap(float viewX, float viewY) {
|
||||||
dispatchTap(mAmbientIndicationContainer, viewX, viewY);
|
dispatchTap(mAmbientIndicationContainer, viewX, viewY);
|
||||||
dispatchTap(mAmbientIndicationContainer, viewX, viewY);
|
dispatchTap(mAmbientIndicationContainer, viewX, viewY);
|
||||||
|
|||||||
@@ -51,14 +51,16 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
DozeScreenBrightness mScreen;
|
DozeScreenBrightness mScreen;
|
||||||
FakeSensorManager.FakeGenericSensor mSensor;
|
FakeSensorManager.FakeGenericSensor mSensor;
|
||||||
FakeSensorManager mSensorManager;
|
FakeSensorManager mSensorManager;
|
||||||
|
DozeHostFake mHostFake;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
mServiceFake = new DozeServiceFake();
|
mServiceFake = new DozeServiceFake();
|
||||||
|
mHostFake = new DozeHostFake();
|
||||||
mSensorManager = new FakeSensorManager(mContext);
|
mSensorManager = new FakeSensorManager(mContext);
|
||||||
mSensor = mSensorManager.getFakeLightSensor();
|
mSensor = mSensorManager.getFakeLightSensor();
|
||||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||||
mSensor.getSensor(), null /* handler */);
|
mSensor.getSensor(), mHostFake, null /* handler */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -133,7 +135,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testNullSensor() throws Exception {
|
public void testNullSensor() throws Exception {
|
||||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||||
null /* sensor */, null /* handler */);
|
null /* sensor */, mHostFake, null /* handler */);
|
||||||
|
|
||||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||||
|
|||||||
Reference in New Issue
Block a user