Merge "Don't register for UDFPS long press in STATE_DOZE" into tm-qpr-dev

This commit is contained in:
Beverly Tai
2023-01-17 16:31:37 +00:00
committed by Android (Google) Code Review
4 changed files with 164 additions and 62 deletions

View File

@@ -116,6 +116,7 @@ public class DozeSensors {
private boolean mListening; private boolean mListening;
private boolean mListeningTouchScreenSensors; private boolean mListeningTouchScreenSensors;
private boolean mListeningProxSensors; private boolean mListeningProxSensors;
private boolean mListeningAodOnlySensors;
private boolean mUdfpsEnrolled; private boolean mUdfpsEnrolled;
@DevicePostureController.DevicePostureInt @DevicePostureController.DevicePostureInt
@@ -184,7 +185,8 @@ public class DozeSensors {
dozeParameters.getPulseOnSigMotion(), dozeParameters.getPulseOnSigMotion(),
DozeLog.PULSE_REASON_SENSOR_SIGMOTION, DozeLog.PULSE_REASON_SENSOR_SIGMOTION,
false /* touchCoords */, false /* touchCoords */,
false /* touchscreen */), false /* touchscreen */
),
new TriggerSensor( new TriggerSensor(
mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE), mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE),
Settings.Secure.DOZE_PICK_UP_GESTURE, Settings.Secure.DOZE_PICK_UP_GESTURE,
@@ -195,14 +197,17 @@ public class DozeSensors {
false /* touchscreen */, false /* touchscreen */,
false /* ignoresSetting */, false /* ignoresSetting */,
false /* requires prox */, false /* requires prox */,
true /* immediatelyReRegister */), true /* immediatelyReRegister */,
false /* requiresAod */
),
new TriggerSensor( new TriggerSensor(
findSensor(config.doubleTapSensorType()), findSensor(config.doubleTapSensorType()),
Settings.Secure.DOZE_DOUBLE_TAP_GESTURE, Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
true /* configured */, true /* configured */,
DozeLog.REASON_SENSOR_DOUBLE_TAP, DozeLog.REASON_SENSOR_DOUBLE_TAP,
dozeParameters.doubleTapReportsTouchCoordinates(), dozeParameters.doubleTapReportsTouchCoordinates(),
true /* touchscreen */), true /* touchscreen */
),
new TriggerSensor( new TriggerSensor(
findSensors(config.tapSensorTypeMapping()), findSensors(config.tapSensorTypeMapping()),
Settings.Secure.DOZE_TAP_SCREEN_GESTURE, Settings.Secure.DOZE_TAP_SCREEN_GESTURE,
@@ -214,7 +219,9 @@ public class DozeSensors {
false /* ignoresSetting */, false /* ignoresSetting */,
dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */, dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */,
true /* immediatelyReRegister */, true /* immediatelyReRegister */,
mDevicePosture), mDevicePosture,
false
),
new TriggerSensor( new TriggerSensor(
findSensor(config.longPressSensorType()), findSensor(config.longPressSensorType()),
Settings.Secure.DOZE_PULSE_ON_LONG_PRESS, Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
@@ -225,7 +232,9 @@ public class DozeSensors {
true /* touchscreen */, true /* touchscreen */,
false /* ignoresSetting */, false /* ignoresSetting */,
dozeParameters.longPressUsesProx() /* requiresProx */, dozeParameters.longPressUsesProx() /* requiresProx */,
true /* immediatelyReRegister */), true /* immediatelyReRegister */,
false /* requiresAod */
),
new TriggerSensor( new TriggerSensor(
findSensor(config.udfpsLongPressSensorType()), findSensor(config.udfpsLongPressSensorType()),
"doze_pulse_on_auth", "doze_pulse_on_auth",
@@ -236,7 +245,9 @@ public class DozeSensors {
true /* touchscreen */, true /* touchscreen */,
false /* ignoresSetting */, false /* ignoresSetting */,
dozeParameters.longPressUsesProx(), dozeParameters.longPressUsesProx(),
false /* immediatelyReRegister */), false /* immediatelyReRegister */,
true /* requiresAod */
),
new PluginSensor( new PluginSensor(
new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY),
Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE,
@@ -244,7 +255,8 @@ public class DozeSensors {
&& mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT), && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT),
DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE, DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE,
false /* reports touch coordinates */, false /* reports touch coordinates */,
false /* touchscreen */), false /* touchscreen */
),
new PluginSensor( new PluginSensor(
new SensorManagerPlugin.Sensor(TYPE_WAKE_LOCK_SCREEN), new SensorManagerPlugin.Sensor(TYPE_WAKE_LOCK_SCREEN),
Settings.Secure.DOZE_WAKE_LOCK_SCREEN_GESTURE, Settings.Secure.DOZE_WAKE_LOCK_SCREEN_GESTURE,
@@ -252,7 +264,8 @@ public class DozeSensors {
DozeLog.PULSE_REASON_SENSOR_WAKE_REACH, DozeLog.PULSE_REASON_SENSOR_WAKE_REACH,
false /* reports touch coordinates */, false /* reports touch coordinates */,
false /* touchscreen */, false /* touchscreen */,
mConfig.getWakeLockScreenDebounce()), mConfig.getWakeLockScreenDebounce()
),
new TriggerSensor( new TriggerSensor(
findSensor(config.quickPickupSensorType()), findSensor(config.quickPickupSensorType()),
Settings.Secure.DOZE_QUICK_PICKUP_GESTURE, Settings.Secure.DOZE_QUICK_PICKUP_GESTURE,
@@ -263,7 +276,9 @@ public class DozeSensors {
false /* requiresTouchscreen */, false /* requiresTouchscreen */,
false /* ignoresSetting */, false /* ignoresSetting */,
false /* requiresProx */, false /* requiresProx */,
true /* immediatelyReRegister */), true /* immediatelyReRegister */,
false /* requiresAod */
),
}; };
setProxListening(false); // Don't immediately start listening when we register. setProxListening(false); // Don't immediately start listening when we register.
mProximitySensor.register( mProximitySensor.register(
@@ -357,29 +372,36 @@ public class DozeSensors {
/** /**
* If sensors should be registered and sending signals. * If sensors should be registered and sending signals.
*/ */
public void setListening(boolean listen, boolean includeTouchScreenSensors) { public void setListening(boolean listen, boolean includeTouchScreenSensors,
if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors) { boolean includeAodOnlySensors) {
if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors
&& mListeningAodOnlySensors == includeAodOnlySensors) {
return; return;
} }
mListening = listen; mListening = listen;
mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningTouchScreenSensors = includeTouchScreenSensors;
mListeningAodOnlySensors = includeAodOnlySensors;
updateListening(); updateListening();
} }
/** /**
* If sensors should be registered and sending signals. * If sensors should be registered and sending signals.
*/ */
public void setListening(boolean listen, boolean includeTouchScreenSensors, public void setListeningWithPowerState(boolean listen, boolean includeTouchScreenSensors,
boolean lowPowerStateOrOff) { boolean includeAodRequiringSensors, boolean lowPowerStateOrOff) {
final boolean shouldRegisterProxSensors = final boolean shouldRegisterProxSensors =
!mSelectivelyRegisterProxSensors || lowPowerStateOrOff; !mSelectivelyRegisterProxSensors || lowPowerStateOrOff;
if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors if (mListening == listen
&& mListeningProxSensors == shouldRegisterProxSensors) { && mListeningTouchScreenSensors == includeTouchScreenSensors
&& mListeningProxSensors == shouldRegisterProxSensors
&& mListeningAodOnlySensors == includeAodRequiringSensors
) {
return; return;
} }
mListening = listen; mListening = listen;
mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningTouchScreenSensors = includeTouchScreenSensors;
mListeningProxSensors = shouldRegisterProxSensors; mListeningProxSensors = shouldRegisterProxSensors;
mListeningAodOnlySensors = includeAodRequiringSensors;
updateListening(); updateListening();
} }
@@ -391,7 +413,8 @@ public class DozeSensors {
for (TriggerSensor s : mTriggerSensors) { for (TriggerSensor s : mTriggerSensors) {
boolean listen = mListening boolean listen = mListening
&& (!s.mRequiresTouchscreen || mListeningTouchScreenSensors) && (!s.mRequiresTouchscreen || mListeningTouchScreenSensors)
&& (!s.mRequiresProx || mListeningProxSensors); && (!s.mRequiresProx || mListeningProxSensors)
&& (!s.mRequiresAod || mListeningAodOnlySensors);
s.setListening(listen); s.setListening(listen);
if (listen) { if (listen) {
anyListening = true; anyListening = true;
@@ -499,6 +522,9 @@ public class DozeSensors {
private final boolean mRequiresTouchscreen; private final boolean mRequiresTouchscreen;
private final boolean mRequiresProx; private final boolean mRequiresProx;
// Whether the sensor should only register if the device is in AOD
private final boolean mRequiresAod;
// Whether to immediately re-register this sensor after the sensor is triggered. // Whether to immediately re-register this sensor after the sensor is triggered.
// If false, the sensor registration will be updated on the next AOD state transition. // If false, the sensor registration will be updated on the next AOD state transition.
private final boolean mImmediatelyReRegister; private final boolean mImmediatelyReRegister;
@@ -527,7 +553,8 @@ public class DozeSensors {
requiresTouchscreen, requiresTouchscreen,
false /* ignoresSetting */, false /* ignoresSetting */,
false /* requiresProx */, false /* requiresProx */,
true /* immediatelyReRegister */ true /* immediatelyReRegister */,
false
); );
} }
@@ -541,7 +568,8 @@ public class DozeSensors {
boolean requiresTouchscreen, boolean requiresTouchscreen,
boolean ignoresSetting, boolean ignoresSetting,
boolean requiresProx, boolean requiresProx,
boolean immediatelyReRegister boolean immediatelyReRegister,
boolean requiresAod
) { ) {
this( this(
new Sensor[]{ sensor }, new Sensor[]{ sensor },
@@ -554,7 +582,8 @@ public class DozeSensors {
ignoresSetting, ignoresSetting,
requiresProx, requiresProx,
immediatelyReRegister, immediatelyReRegister,
DevicePostureController.DEVICE_POSTURE_UNKNOWN DevicePostureController.DEVICE_POSTURE_UNKNOWN,
requiresAod
); );
} }
@@ -569,7 +598,8 @@ public class DozeSensors {
boolean ignoresSetting, boolean ignoresSetting,
boolean requiresProx, boolean requiresProx,
boolean immediatelyReRegister, boolean immediatelyReRegister,
@DevicePostureController.DevicePostureInt int posture @DevicePostureController.DevicePostureInt int posture,
boolean requiresAod
) { ) {
mSensors = sensors; mSensors = sensors;
mSetting = setting; mSetting = setting;
@@ -580,6 +610,7 @@ public class DozeSensors {
mRequiresTouchscreen = requiresTouchscreen; mRequiresTouchscreen = requiresTouchscreen;
mIgnoresSetting = ignoresSetting; mIgnoresSetting = ignoresSetting;
mRequiresProx = requiresProx; mRequiresProx = requiresProx;
mRequiresAod = requiresAod;
mPosture = posture; mPosture = posture;
mImmediatelyReRegister = immediatelyReRegister; mImmediatelyReRegister = immediatelyReRegister;
} }

View File

@@ -111,6 +111,7 @@ public class DozeTriggers implements DozeMachine.Part {
private boolean mWantProxSensor; private boolean mWantProxSensor;
private boolean mWantTouchScreenSensors; private boolean mWantTouchScreenSensors;
private boolean mWantSensors; private boolean mWantSensors;
private boolean mInAod;
private final UserTracker.Callback mUserChangedCallback = private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() { new UserTracker.Callback() {
@@ -460,12 +461,19 @@ public class DozeTriggers implements DozeMachine.Part {
mDozeSensors.requestTemporaryDisable(); mDozeSensors.requestTemporaryDisable();
break; break;
case DOZE: case DOZE:
case DOZE_AOD:
mAodInterruptRunnable = null; mAodInterruptRunnable = null;
mWantProxSensor = newState != DozeMachine.State.DOZE; mWantProxSensor = false;
mWantSensors = true; mWantSensors = true;
mWantTouchScreenSensors = true; mWantTouchScreenSensors = true;
if (newState == DozeMachine.State.DOZE_AOD && !sWakeDisplaySensorState) { mInAod = false;
break;
case DOZE_AOD:
mAodInterruptRunnable = null;
mWantProxSensor = true;
mWantSensors = true;
mWantTouchScreenSensors = true;
mInAod = true;
if (!sWakeDisplaySensorState) {
onWakeScreen(false, newState, DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE); onWakeScreen(false, newState, DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE);
} }
break; break;
@@ -491,7 +499,7 @@ public class DozeTriggers implements DozeMachine.Part {
break; break;
default: default:
} }
mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, mInAod);
} }
private void registerCallbacks() { private void registerCallbacks() {
@@ -510,11 +518,12 @@ public class DozeTriggers implements DozeMachine.Part {
private void stopListeningToAllTriggers() { private void stopListeningToAllTriggers() {
unregisterCallbacks(); unregisterCallbacks();
mDozeSensors.setListening(false, false); mDozeSensors.setListening(false, false, false);
mDozeSensors.setProxListening(false); mDozeSensors.setProxListening(false);
mWantSensors = false; mWantSensors = false;
mWantProxSensor = false; mWantProxSensor = false;
mWantTouchScreenSensors = false; mWantTouchScreenSensors = false;
mInAod = false;
} }
@Override @Override
@@ -523,7 +532,8 @@ public class DozeTriggers implements DozeMachine.Part {
final boolean lowPowerStateOrOff = state == Display.STATE_DOZE final boolean lowPowerStateOrOff = state == Display.STATE_DOZE
|| state == Display.STATE_DOZE_SUSPEND || state == Display.STATE_OFF; || state == Display.STATE_DOZE_SUSPEND || state == Display.STATE_OFF;
mDozeSensors.setProxListening(mWantProxSensor && lowPowerStateOrOff); mDozeSensors.setProxListening(mWantProxSensor && lowPowerStateOrOff);
mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, lowPowerStateOrOff); mDozeSensors.setListeningWithPowerState(mWantSensors, mWantTouchScreenSensors,
mInAod, lowPowerStateOrOff);
if (mAodInterruptRunnable != null && state == Display.STATE_ON) { if (mAodInterruptRunnable != null && state == Display.STATE_ON) {
mAodInterruptRunnable.run(); mAodInterruptRunnable.run();

View File

@@ -144,7 +144,7 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSensorDebounce() { public void testSensorDebounce() {
mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true);
mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class)); mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class));
mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages();
@@ -162,7 +162,7 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSetListening_firstTrue_registerSettingsObserver() { public void testSetListening_firstTrue_registerSettingsObserver() {
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true);
verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class)); verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class));
} }
@@ -170,8 +170,8 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() { public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() {
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true);
mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true);
verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class)); verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class));
} }
@@ -196,7 +196,7 @@ public class DozeSensorsTest extends SysuiTestCase {
assertFalse(mSensorTap.mRequested); assertFalse(mSensorTap.mRequested);
// WHEN we're now in a low powered state // WHEN we're now in a low powered state
dozeSensors.setListening(true, true, true); dozeSensors.setListeningWithPowerState(true, true, true, true);
// THEN the tap sensor is registered // THEN the tap sensor is registered
assertTrue(mSensorTap.mRequested); assertTrue(mSensorTap.mRequested);
@@ -207,12 +207,12 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensors enabled // GIVEN doze sensors enabled
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true); when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
// GIVEN a trigger sensor // GIVEN a trigger sensor that's enabled by settings
Sensor mockSensor = mock(Sensor.class); Sensor mockSensor = mock(Sensor.class);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled(
mockSensor, mockSensor,
/* settingEnabled */ true, /* settingEnabled */ true
/* requiresTouchScreen */ true); );
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
.thenReturn(true); .thenReturn(true);
@@ -228,12 +228,12 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensors enabled // GIVEN doze sensors enabled
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true); when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
// GIVEN a trigger sensor // GIVEN a trigger sensor that's not enabled by settings
Sensor mockSensor = mock(Sensor.class); Sensor mockSensor = mock(Sensor.class);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled(
mockSensor, mockSensor,
/* settingEnabled*/ false, /* settingEnabled*/ false
/* requiresTouchScreen */ true); );
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
.thenReturn(true); .thenReturn(true);
@@ -249,12 +249,12 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensors enabled // GIVEN doze sensors enabled
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true); when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
// GIVEN a trigger sensor that's // GIVEN a trigger sensor that's not enabled by settings
Sensor mockSensor = mock(Sensor.class); Sensor mockSensor = mock(Sensor.class);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled(
mockSensor, mockSensor,
/* settingEnabled*/ false, /* settingEnabled*/ false
/* requiresTouchScreen */ true); );
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
.thenReturn(true); .thenReturn(true);
@@ -264,7 +264,7 @@ public class DozeSensorsTest extends SysuiTestCase {
// WHEN ignoreSetting is called // WHEN ignoreSetting is called
triggerSensor.ignoreSetting(true); triggerSensor.ignoreSetting(true);
// THEN the sensor is registered // THEN the sensor is still registered since the setting is ignore
assertTrue(triggerSensor.mRegistered); assertTrue(triggerSensor.mRegistered);
} }
@@ -275,10 +275,10 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN a trigger sensor // GIVEN a trigger sensor
Sensor mockSensor = mock(Sensor.class); Sensor mockSensor = mock(Sensor.class);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled(
mockSensor, mockSensor,
/* settingEnabled*/ true, /* settingEnabled*/ true
/* requiresTouchScreen */ true); );
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
.thenReturn(true); .thenReturn(true);
@@ -295,7 +295,7 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensor that supports postures // GIVEN doze sensor that supports postures
Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT);
Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture(
new Sensor[] { new Sensor[] {
null /* unknown */, null /* unknown */,
closedSensor, closedSensor,
@@ -316,7 +316,7 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensor that supports postures // GIVEN doze sensor that supports postures
Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT);
Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture(
new Sensor[] { new Sensor[] {
null /* unknown */, null /* unknown */,
closedSensor, closedSensor,
@@ -345,7 +345,7 @@ public class DozeSensorsTest extends SysuiTestCase {
// GIVEN doze sensor that supports postures // GIVEN doze sensor that supports postures
Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT);
Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture(
new Sensor[] { new Sensor[] {
null /* unknown */, null /* unknown */,
closedSensor, closedSensor,
@@ -400,7 +400,7 @@ public class DozeSensorsTest extends SysuiTestCase {
public void testUdfpsEnrollmentChanged() throws Exception { public void testUdfpsEnrollmentChanged() throws Exception {
// GIVEN a UDFPS_LONG_PRESS trigger sensor that's not configured // GIVEN a UDFPS_LONG_PRESS trigger sensor that's not configured
Sensor mockSensor = mock(Sensor.class); Sensor mockSensor = mock(Sensor.class);
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture(
mockSensor, mockSensor,
REASON_SENSOR_UDFPS_LONG_PRESS, REASON_SENSOR_UDFPS_LONG_PRESS,
/* configured */ false); /* configured */ false);
@@ -409,7 +409,7 @@ public class DozeSensorsTest extends SysuiTestCase {
.thenReturn(true); .thenReturn(true);
// WHEN listening state is set to TRUE // WHEN listening state is set to TRUE
mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true);
// THEN mRegistered is still false b/c !mConfigured // THEN mRegistered is still false b/c !mConfigured
assertFalse(triggerSensor.mConfigured); assertFalse(triggerSensor.mConfigured);
@@ -438,6 +438,35 @@ public class DozeSensorsTest extends SysuiTestCase {
} }
} }
@Test
public void aodOnlySensor_onlyRegisteredWhenAodSensorsIncluded() {
// GIVEN doze sensors enabled
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
// GIVEN a trigger sensor that requires aod
Sensor mockSensor = mock(Sensor.class);
TriggerSensor aodOnlyTriggerSensor = mDozeSensors.createDozeSensorRequiringAod(mockSensor);
when(mSensorManager.requestTriggerSensor(eq(aodOnlyTriggerSensor), eq(mockSensor)))
.thenReturn(true);
mDozeSensors.addSensor(aodOnlyTriggerSensor);
// WHEN aod only sensors aren't included
mDozeSensors.setListening(/* listen */ true, /* includeTouchScreenSensors */true,
/* includeAodOnlySensors */false);
// THEN the sensor is not registered or requested
assertFalse(aodOnlyTriggerSensor.mRequested);
assertFalse(aodOnlyTriggerSensor.mRegistered);
// WHEN aod only sensors ARE included
mDozeSensors.setListening(/* listen */ true, /* includeTouchScreenSensors */true,
/* includeAodOnlySensors */true);
// THEN the sensor is registered and requested
assertTrue(aodOnlyTriggerSensor.mRequested);
assertTrue(aodOnlyTriggerSensor.mRegistered);
}
@Test @Test
public void liftToWake_defaultSetting_configDefaultFalse() { public void liftToWake_defaultSetting_configDefaultFalse() {
// WHEN the default lift to wake gesture setting is false // WHEN the default lift to wake gesture setting is false
@@ -494,8 +523,8 @@ public class DozeSensorsTest extends SysuiTestCase {
mTriggerSensors = new TriggerSensor[] {mTriggerSensor, mSensorTap}; mTriggerSensors = new TriggerSensor[] {mTriggerSensor, mSensorTap};
} }
public TriggerSensor createDozeSensor(Sensor sensor, boolean settingEnabled, public TriggerSensor createDozeSensorWithSettingEnabled(Sensor sensor,
boolean requiresTouchScreen) { boolean settingEnabled) {
return new TriggerSensor(/* sensor */ sensor, return new TriggerSensor(/* sensor */ sensor,
/* setting name */ "test_setting", /* setting name */ "test_setting",
/* settingDefault */ settingEnabled, /* settingDefault */ settingEnabled,
@@ -504,11 +533,13 @@ public class DozeSensorsTest extends SysuiTestCase {
/* reportsTouchCoordinate*/ false, /* reportsTouchCoordinate*/ false,
/* requiresTouchscreen */ false, /* requiresTouchscreen */ false,
/* ignoresSetting */ false, /* ignoresSetting */ false,
requiresTouchScreen, /* requiresProx */ false,
/* immediatelyReRegister */ true); /* immediatelyReRegister */ true,
/* requiresAod */false
);
} }
public TriggerSensor createDozeSensor( public TriggerSensor createDozeSensorForPosture(
Sensor sensor, Sensor sensor,
int pulseReason, int pulseReason,
boolean configured boolean configured
@@ -522,15 +553,35 @@ public class DozeSensorsTest extends SysuiTestCase {
/* requiresTouchscreen */ false, /* requiresTouchscreen */ false,
/* ignoresSetting */ false, /* ignoresSetting */ false,
/* requiresTouchScreen */ false, /* requiresTouchScreen */ false,
/* immediatelyReRegister*/ true); /* immediatelyReRegister*/ true,
false
);
} }
/** /**
* create a doze sensor that supports postures and is enabled * Create a doze sensor that requires Aod
*/ */
public TriggerSensor createDozeSensor(Sensor[] sensors, int posture) { public TriggerSensor createDozeSensorRequiringAod(Sensor sensor) {
return new TriggerSensor(/* sensor */ sensor,
/* setting name */ "aod_requiring_sensor",
/* settingDefault */ true,
/* configured */ true,
/* pulseReason*/ 0,
/* reportsTouchCoordinate*/ false,
/* requiresTouchscreen */ false,
/* ignoresSetting */ false,
/* requiresProx */ false,
/* immediatelyReRegister */ true,
/* requiresAoD */ true
);
}
/**
* Create a doze sensor that supports postures and is enabled
*/
public TriggerSensor createDozeSensorForPosture(Sensor[] sensors, int posture) {
return new TriggerSensor(/* sensor */ sensors, return new TriggerSensor(/* sensor */ sensors,
/* setting name */ "test_setting", /* setting name */ "posture_test_setting",
/* settingDefault */ true, /* settingDefault */ true,
/* configured */ true, /* configured */ true,
/* pulseReason*/ 0, /* pulseReason*/ 0,
@@ -539,7 +590,9 @@ public class DozeSensorsTest extends SysuiTestCase {
/* ignoresSetting */ true, /* ignoresSetting */ true,
/* requiresProx */ false, /* requiresProx */ false,
/* immediatelyReRegister */ true, /* immediatelyReRegister */ true,
posture); posture,
/* requiresUi */ false
);
} }
public void addSensor(TriggerSensor sensor) { public void addSensor(TriggerSensor sensor) {

View File

@@ -395,6 +395,14 @@ public class DozeTriggersTest extends SysuiTestCase {
verify(mAuthController).onAodInterrupt(anyInt(), anyInt(), anyFloat(), anyFloat()); verify(mAuthController).onAodInterrupt(anyInt(), anyInt(), anyFloat(), anyFloat());
} }
@Test
public void udfpsLongPress_dozeState_notRegistered() {
// GIVEN device is DOZE_AOD_PAUSED
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
// beverlyt
}
private void waitForSensorManager() { private void waitForSensorManager() {
mExecutor.runAllReady(); mExecutor.runAllReady();
} }