Merge "AOD: Add support for dimming in software" into oc-dr1-dev

am: b2107c9b56

Change-Id: Ic3cf031a067ae6221ae9e8fb3acdcd1625dfa7bc
This commit is contained in:
Adrian Roos
2017-08-04 09:52:31 +00:00
committed by android-build-merger
7 changed files with 67 additions and 10 deletions

View File

@@ -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>

View File

@@ -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,

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);
}
}
};

View File

@@ -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);

View File

@@ -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);