Register for doze brightness as soon as we can

On devices with under display prox, binned brightness
no longer uses the prox sensor, so let's remove the
brightnessUsesProx config that was only used for
devices with under display prox (to avoid the blinking
white dot).

We now also no longer need to wait on the screen state
to change to dozing states to register for the brightness
sensor since the brightness sensor doesn't check prox.

Test: manual, atest DozeScreenBrightnessTest
Fixes: 194151347
Change-Id: Ie5110585b683accccc1066a06b069072947ffb3f
This commit is contained in:
Beverly
2021-09-02 07:51:28 -04:00
parent 8daf4242b3
commit 74580d1f20
5 changed files with 46 additions and 116 deletions

View File

@@ -194,11 +194,6 @@
low powered state yet. -->
<bool name="doze_long_press_uses_prox">true</bool>
<!-- Doze: whether the brightness sensor uses the proximity sensor.
If both this parameter and doze_selectively_register_prox are true, registration for the
brightness sensor won't occur when the display state is ON. -->
<bool name="doze_brightness_uses_prox">true</bool>
<!-- Doze: should notifications be used as a pulse signal? -->
<bool name="doze_pulse_on_notifications">true</bool>

View File

@@ -29,7 +29,6 @@ import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.Display;
import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.dagger.BrightnessSensor;
@@ -111,7 +110,15 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
switch (newState) {
case INITIALIZED:
resetBrightnessToDefault();
break;
case DOZE_AOD:
case DOZE_REQUEST_PULSE:
case DOZE_AOD_DOCKED:
setLightSensorEnabled(true);
break;
case DOZE:
setLightSensorEnabled(false);
resetBrightnessToDefault();
break;
case FINISH:
@@ -124,22 +131,6 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
}
}
@Override
public void onScreenState(int state) {
boolean isDockedScreenOn = state == Display.STATE_ON && mDockManager.isDocked();
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND
|| (isDockedScreenOn && shouldRegisterLightSensorWhenScreenOnDocked())) {
setLightSensorEnabled(true);
} else {
setLightSensorEnabled(false);
}
}
private boolean shouldRegisterLightSensorWhenScreenOnDocked() {
return !mDozeParameters.brightnessUsesProx()
|| !mDozeParameters.getSelectivelyRegisterSensorsUsingProx();
}
private void onDestroy() {
setLightSensorEnabled(false);
}

View File

@@ -267,13 +267,6 @@ public class DozeParameters implements TunerService.Tunable,
return mResources.getBoolean(R.bool.doze_long_press_uses_prox);
}
/**
* Whether the brightness sensor uses the proximity sensor.
*/
public boolean brightnessUsesProx() {
return mResources.getBoolean(R.bool.doze_brightness_uses_prox);
}
/**
* Callback to listen for DozeParameter changes.
*/
@@ -298,6 +291,7 @@ public class DozeParameters implements TunerService.Tunable,
@Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
pw.print("getAlwaysOn(): "); pw.println(getAlwaysOn());
pw.print("getDisplayStateSupported(): "); pw.println(getDisplayStateSupported());
pw.print("getPulseDuration(): "); pw.println(getPulseDuration());
pw.print("getPulseInDuration(): "); pw.println(getPulseInDuration());
@@ -310,7 +304,6 @@ public class DozeParameters implements TunerService.Tunable,
pw.print("getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold());
pw.print("getSelectivelyRegisterSensorsUsingProx(): ");
pw.println(getSelectivelyRegisterSensorsUsingProx());
pw.print("brightnessUsesProx(): "); pw.println(brightnessUsesProx());
}
interface Callback {

View File

@@ -43,7 +43,6 @@ public class DozeConfigurationUtil {
when(params.singleTapUsesProx()).thenReturn(true);
when(params.longPressUsesProx()).thenReturn(true);
when(params.getQuickPickupAodDuration()).thenReturn(500);
when(params.brightnessUsesProx()).thenReturn(true);
doneHolder[0] = true;
return params;

View File

@@ -18,6 +18,7 @@ package com.android.systemui.doze;
import static com.android.systemui.doze.DozeMachine.State.DOZE;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_DOCKED;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSING;
import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
@@ -43,7 +44,6 @@ import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.view.Display;
import androidx.test.filters.SmallTest;
@@ -114,8 +114,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
Optional.of(mSensor.getSensor()), mDozeHost, null /* handler */,
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager);
mScreen.onScreenState(Display.STATE_ON);
}
@Test
@@ -126,19 +124,10 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
assertTrue(mServiceFake.screenBrightness <= PowerManager.BRIGHTNESS_ON);
}
@Test
public void testAod_usesLightSensor() {
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(3);
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void testAod_usesDebugValue() throws Exception {
mScreen.onScreenState(Display.STATE_DOZE);
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
waitForSensorManager();
Intent intent = new Intent(DozeScreenBrightness.ACTION_AOD_BRIGHTNESS);
@@ -161,71 +150,53 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
}
@Test
public void testAodDocked_doNotSelectivelyUseProx_usesLightSensor() {
// GIVEN the device doesn't need to selectively register for prox sensors and
// brightness sensor uses prox
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(false);
when(mDozeParameters.brightnessUsesProx()).thenReturn(true);
public void doze_doesNotUseLightSensor() {
// GIVEN the device is docked and the display state changes to ON
when(mDockManager.isDocked()).thenReturn(true);
mScreen.onScreenState(Display.STATE_ON);
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE);
waitForSensorManager();
// WHEN new sensor event sent
mSensor.sendSensorEvent(3);
// THEN brightness is updated
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void testAodDocked_brightnessDoesNotUseProx_usesLightSensor() {
// GIVEN the device doesn't need to selectively register for prox sensors but
// the brightness sensor doesn't use prox
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(true);
when(mDozeParameters.brightnessUsesProx()).thenReturn(false);
// GIVEN the device is docked and the display state changes to ON
when(mDockManager.isDocked()).thenReturn(true);
mScreen.onScreenState(Display.STATE_ON);
waitForSensorManager();
// WHEN new sensor event sent
mSensor.sendSensorEvent(3);
// THEN brightness is updated
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void testAodDocked_noProx_brightnessUsesProx_doNotUseLightSensor() {
final int startBrightness = mServiceFake.screenBrightness;
// GIVEN the device needs to selectively register for prox sensors and
// the brightness sensor uses prox
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(true);
when(mDozeParameters.brightnessUsesProx()).thenReturn(true);
// GIVEN the device is docked and the display state is on
when(mDockManager.isDocked()).thenReturn(true);
mScreen.onScreenState(Display.STATE_ON);
waitForSensorManager();
// WHEN new sensor event sent
mSensor.sendSensorEvent(3);
// THEN brightness is NOT changed
// THEN brightness is NOT changed, it's set to the default brightness
assertNotSame(3, mServiceFake.screenBrightness);
assertEquals(startBrightness, mServiceFake.screenBrightness);
assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
}
@Test
public void aod_usesLightSensor() {
// GIVEN the device is docked and the display state changes to ON
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
waitForSensorManager();
// WHEN new sensor event sent
mSensor.sendSensorEvent(3);
// THEN brightness is updated
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void docked_usesLightSensor() {
// GIVEN the device is docked and the display state changes to ON
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_DOCKED);
waitForSensorManager();
// WHEN new sensor event sent
mSensor.sendSensorEvent(3);
// THEN brightness is updated
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void testPausingAod_doesNotResetBrightness() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(1);
@@ -265,18 +236,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
}
@Test
public void testOnScreenStateSetBeforeTransition_stillRegistersSensor() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.onScreenState(Display.STATE_DOZE);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
waitForSensorManager();
mSensor.sendSensorEvent(1);
assertEquals(1, mServiceFake.screenBrightness);
}
@Test
public void testNullSensor() throws Exception {
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
@@ -287,15 +246,12 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
mScreen.onScreenState(Display.STATE_DOZE);
mScreen.onScreenState(Display.STATE_OFF);
}
@Test
public void testNoBrightnessDeliveredAfterFinish() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
mScreen.transitionTo(DOZE_AOD, FINISH);
waitForSensorManager();
@@ -308,7 +264,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
public void testNonPositiveBrightness_keepsPreviousBrightnessAndScrim() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(1);
@@ -322,7 +277,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
public void pausingAod_unblanksAfterSensor() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(2);
@@ -334,7 +288,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
reset(mDozeHost);
mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(2);
verify(mDozeHost).setAodDimmingScrim(eq(0f));
@@ -344,7 +297,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
public void pausingAod_unblanksIfSensorWasAlwaysReady() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
mSensor.sendSensorEvent(2);