Merge "Don't turn on prox until after screen is off/dozed" into rvc-d1-dev am: 6f718bba6f

Change-Id: Ic19df85b929ce362d221455e602143ec47d381d7
This commit is contained in:
Dave Mankoff
2020-05-19 01:53:27 +00:00
committed by Automerger Merge Worker
8 changed files with 77 additions and 92 deletions

View File

@@ -199,6 +199,12 @@ public class DozeMachine {
requestState(State.DOZE_REQUEST_PULSE, pulseReason);
}
void onScreenState(int state) {
for (Part part : mParts) {
part.onScreenState(state);
}
}
private void requestState(State requestedState, int pulseReason) {
Assert.isMainThread();
if (DEBUG) {
@@ -423,6 +429,9 @@ public class DozeMachine {
/** Give the Part a chance to clean itself up. */
default void destroy() {}
/** Alerts that the screenstate is being changed. */
default void onScreenState(int state) {}
}
/** A wrapper interface for {@link android.service.dreams.DreamService} */

View File

@@ -29,6 +29,7 @@ import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.Display;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -68,6 +69,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
* --ei brightness_bucket 1}
*/
private int mDebugBrightnessBucket = -1;
private DozeMachine.State mState;
@VisibleForTesting
public DozeScreenBrightness(Context context, DozeMachine.Service service,
@@ -107,17 +109,10 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
@Override
public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
mState = 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:
@@ -130,6 +125,16 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
}
}
@Override
public void onScreenState(int state) {
if (mState == DozeMachine.State.FINISH && !mScreenOff
&& (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND)) {
setLightSensorEnabled(true);
} else {
setLightSensorEnabled(false);
}
}
private void onDestroy() {
setLightSensorEnabled(false);
if (mDebuggable) {

View File

@@ -66,7 +66,6 @@ public class DozeSensors {
private final AlarmManager mAlarmManager;
private final AsyncSensorManager mSensorManager;
private final ContentResolver mResolver;
private final TriggerSensor mPickupSensor;
private final DozeParameters mDozeParameters;
private final AmbientDisplayConfiguration mConfig;
private final WakeLock mWakeLock;
@@ -80,7 +79,6 @@ public class DozeSensors {
private long mDebounceFrom;
private boolean mSettingRegistered;
private boolean mListening;
private boolean mPaused;
@VisibleForTesting
public enum DozeSensorsUiEvent implements UiEventLogger.UiEventEnum {
@@ -121,7 +119,7 @@ public class DozeSensors {
dozeParameters.getPulseOnSigMotion(),
DozeLog.PULSE_REASON_SENSOR_SIGMOTION, false /* touchCoords */,
false /* touchscreen */, dozeLog),
mPickupSensor = new TriggerSensor(
new TriggerSensor(
mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE),
Settings.Secure.DOZE_PICK_UP_GESTURE,
true /* settingDef */,
@@ -231,18 +229,6 @@ public class DozeSensors {
updateListening();
}
/**
* Unregister sensors, when listening, unless they are prox gated.
* @see #setListening(boolean)
*/
public void setPaused(boolean paused) {
if (mPaused == paused) {
return;
}
mPaused = paused;
updateListening();
}
/**
* Registers/unregisters sensors based on internal state.
*/
@@ -304,10 +290,6 @@ public class DozeSensors {
}
};
public void setDisableSensorsInterferingWithProximity(boolean disable) {
mPickupSensor.setDisabled(disable);
}
/** Ignore the setting value of only the sensors that require the touchscreen. */
public void ignoreTouchScreenSensorsSettingInterferingWithDocking(boolean ignore) {
for (TriggerSensor sensor : mSensors) {

View File

@@ -130,4 +130,10 @@ public class DozeService extends DreamService
mDozeMachine.requestState(DozeMachine.State.DOZE);
}
}
@Override
public void setDozeScreenState(int state) {
super.setDozeScreenState(state);
mDozeMachine.onScreenState(state);
}
}

View File

@@ -31,6 +31,7 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.text.format.Formatter;
import android.util.Log;
import android.view.Display;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
@@ -93,6 +94,9 @@ public class DozeTriggers implements DozeMachine.Part {
private boolean mPulsePending;
private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
private boolean mWantProx;
private boolean mWantSensors;
private boolean mWantTouchScreenSensors;
@VisibleForTesting
public enum DozingUpdateUiEvent implements UiEventLogger.UiEventEnum {
@@ -384,24 +388,22 @@ public class DozeTriggers implements DozeMachine.Part {
break;
case DOZE:
case DOZE_AOD:
mDozeSensors.setProxListening(newState != DozeMachine.State.DOZE);
mDozeSensors.setListening(true);
mDozeSensors.setPaused(false);
mWantProx = newState != DozeMachine.State.DOZE;
mWantSensors = true;
mWantTouchScreenSensors = true;
if (newState == DozeMachine.State.DOZE_AOD && !sWakeDisplaySensorState) {
onWakeScreen(false, newState);
}
break;
case DOZE_AOD_PAUSED:
case DOZE_AOD_PAUSING:
mDozeSensors.setProxListening(true);
mDozeSensors.setPaused(true);
mWantProx = true;
break;
case DOZE_PULSING:
case DOZE_PULSING_BRIGHT:
case DOZE_AOD_DOCKED:
mDozeSensors.setTouchscreenSensorsListening(false);
mDozeSensors.setProxListening(true);
mDozeSensors.setPaused(false);
mWantProx = true;
mWantTouchScreenSensors = false;
break;
case DOZE_PULSE_DONE:
mDozeSensors.requestTemporaryDisable();
@@ -420,6 +422,19 @@ public class DozeTriggers implements DozeMachine.Part {
}
}
@Override
public void onScreenState(int state) {
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND
|| state == Display.STATE_OFF) {
mDozeSensors.setProxListening(mWantProx);
mDozeSensors.setListening(mWantSensors);
mDozeSensors.setTouchscreenSensorsListening(mWantTouchScreenSensors);
} else {
mDozeSensors.setProxListening(false);
mDozeSensors.setListening(false);
}
}
private void checkTriggersAtInit() {
if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR
|| mDozeHost.isBlockingDoze()

View File

@@ -18,7 +18,6 @@ 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;
@@ -41,6 +40,7 @@ import android.content.Intent;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.Display;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -89,6 +89,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
mSensor.getSensor(), mBroadcastDispatcher, mDozeHost, null /* handler */,
DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
true /* debuggable */);
mScreen.onScreenState(Display.STATE_ON);
}
@Test
@@ -100,9 +102,11 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
}
@Test
public void testAod_usesLightSensor() throws Exception {
public void testAod_usesLightSensor() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(3);
@@ -133,25 +137,12 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
assertEquals(maxBrightness, mServiceFake.screenBrightness);
}
@Test
public void testPausingAod_doesntPauseLightSensor() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mSensor.sendSensorEvent(1);
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
mSensor.sendSensorEvent(2);
assertEquals(2, mServiceFake.screenBrightness);
}
@Test
public void testPausingAod_doesNotResetBrightness() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(1);
@@ -161,17 +152,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
assertEquals(1, mServiceFake.screenBrightness);
}
@Test
public void testPulsing_usesLightSensor() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE);
mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
mSensor.sendSensorEvent(1);
assertEquals(1, mServiceFake.screenBrightness);
}
@Test
public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
@@ -187,16 +167,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
verify(mDozeHost).setAodDimmingScrim(eq(0f));
}
@Test
public void testDockedAod_usesLightSensor() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD_DOCKED);
mSensor.sendSensorEvent(3);
assertEquals(3, mServiceFake.screenBrightness);
}
@Test
public void testDozingAfterPulsing_pausesLightSensor() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
@@ -205,6 +175,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
mScreen.transitionTo(DOZE_REQUEST_PULSE, DOZE_PULSING);
mScreen.transitionTo(DOZE_PULSING, DOZE_PULSE_DONE);
mScreen.transitionTo(DOZE_PULSE_DONE, DOZE);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(1);
@@ -239,6 +210,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
public void testNonPositiveBrightness_keepsPreviousBrightnessAndScrim() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(1);
mSensor.sendSensorEvent(0);
@@ -248,19 +221,23 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
}
@Test
public void pausingAod_unblanksAfterSensor() throws Exception {
public void pausingAod_unblanksAfterSensor() {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(2);
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
mScreen.transitionTo(FINISH, DOZE_AOD_PAUSING);
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
mSensor.sendSensorEvent(0);
reset(mDozeHost);
mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(2);
verify(mDozeHost).setAodDimmingScrim(eq(0f));
}
@@ -269,9 +246,11 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
public void pausingAod_unblanksIfSensorWasAlwaysReady() throws Exception {
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
mScreen.transitionTo(DOZE_AOD, FINISH);
mScreen.onScreenState(Display.STATE_DOZE);
mSensor.sendSensorEvent(2);
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
mScreen.transitionTo(FINISH, DOZE_AOD_PAUSING);
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
reset(mDozeHost);

View File

@@ -22,7 +22,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -147,21 +146,6 @@ public class DozeSensorsTest extends SysuiTestCase {
verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class));
}
@Test
public void testSetPaused_doesntPause_sensors() {
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
mDozeSensors.setListening(true);
verify(mTriggerSensor).setListening(eq(true));
clearInvocations(mTriggerSensor);
mDozeSensors.setPaused(true);
verify(mTriggerSensor).setListening(eq(true));
clearInvocations(mTriggerSensor);
mDozeSensors.setListening(false);
verify(mTriggerSensor).setListening(eq(false));
}
@Test
public void testDestroy() {
mDozeSensors.destroy();

View File

@@ -35,6 +35,7 @@ import android.os.Looper;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.Display;
import androidx.test.filters.SmallTest;
@@ -132,6 +133,7 @@ public class DozeTriggersTest extends SysuiTestCase {
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
mTriggers.onScreenState(Display.STATE_OFF);
waitForSensorManager();
verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
@@ -140,6 +142,7 @@ public class DozeTriggersTest extends SysuiTestCase {
DozeMachine.State.DOZE_REQUEST_PULSE);
mTriggers.transitionTo(DozeMachine.State.DOZE_REQUEST_PULSE,
DozeMachine.State.DOZE_PULSING);
mTriggers.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
verify(mSensors).cancelTriggerSensor(any(), eq(mTapSensor));
@@ -152,10 +155,12 @@ public class DozeTriggersTest extends SysuiTestCase {
@Test
public void transitionToDockedAod_disablesTouchSensors() {
mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
mTriggers.onScreenState(Display.STATE_OFF);
waitForSensorManager();
verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
mTriggers.transitionTo(DozeMachine.State.DOZE, DozeMachine.State.DOZE_AOD_DOCKED);
mTriggers.onScreenState(Display.STATE_DOZE);
waitForSensorManager();
verify(mSensors).cancelTriggerSensor(any(), eq(mTapSensor));