Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +51 −20 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public class DozeSensors { private boolean mListening; private boolean mListeningTouchScreenSensors; private boolean mListeningProxSensors; private boolean mListeningAodOnlySensors; private boolean mUdfpsEnrolled; @DevicePostureController.DevicePostureInt Loading Loading @@ -184,7 +185,8 @@ public class DozeSensors { dozeParameters.getPulseOnSigMotion(), DozeLog.PULSE_REASON_SENSOR_SIGMOTION, false /* touchCoords */, false /* touchscreen */), false /* touchscreen */ ), new TriggerSensor( mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE), Settings.Secure.DOZE_PICK_UP_GESTURE, Loading @@ -195,14 +197,17 @@ public class DozeSensors { false /* touchscreen */, false /* ignoresSetting */, false /* requires prox */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), new TriggerSensor( findSensor(config.doubleTapSensorType()), Settings.Secure.DOZE_DOUBLE_TAP_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_DOUBLE_TAP, dozeParameters.doubleTapReportsTouchCoordinates(), true /* touchscreen */), true /* touchscreen */ ), new TriggerSensor( findSensors(config.tapSensorTypeMapping()), Settings.Secure.DOZE_TAP_SCREEN_GESTURE, Loading @@ -214,7 +219,9 @@ public class DozeSensors { false /* ignoresSetting */, dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */, true /* immediatelyReRegister */, mDevicePosture), mDevicePosture, false ), new TriggerSensor( findSensor(config.longPressSensorType()), Settings.Secure.DOZE_PULSE_ON_LONG_PRESS, Loading @@ -225,7 +232,9 @@ public class DozeSensors { true /* touchscreen */, false /* ignoresSetting */, dozeParameters.longPressUsesProx() /* requiresProx */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), new TriggerSensor( findSensor(config.udfpsLongPressSensorType()), "doze_pulse_on_auth", Loading @@ -236,7 +245,9 @@ public class DozeSensors { true /* touchscreen */, false /* ignoresSetting */, dozeParameters.longPressUsesProx(), false /* immediatelyReRegister */), false /* immediatelyReRegister */, true /* requiresAod */ ), new PluginSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, Loading @@ -244,7 +255,8 @@ public class DozeSensors { && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT), DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE, false /* reports touch coordinates */, false /* touchscreen */), false /* touchscreen */ ), new PluginSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_LOCK_SCREEN), Settings.Secure.DOZE_WAKE_LOCK_SCREEN_GESTURE, Loading @@ -252,7 +264,8 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_WAKE_REACH, false /* reports touch coordinates */, false /* touchscreen */, mConfig.getWakeLockScreenDebounce()), mConfig.getWakeLockScreenDebounce() ), new TriggerSensor( findSensor(config.quickPickupSensorType()), Settings.Secure.DOZE_QUICK_PICKUP_GESTURE, Loading @@ -263,7 +276,9 @@ public class DozeSensors { false /* requiresTouchscreen */, false /* ignoresSetting */, false /* requiresProx */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), }; setProxListening(false); // Don't immediately start listening when we register. mProximitySensor.register( Loading Loading @@ -357,29 +372,36 @@ public class DozeSensors { /** * If sensors should be registered and sending signals. */ public void setListening(boolean listen, boolean includeTouchScreenSensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors) { public void setListening(boolean listen, boolean includeTouchScreenSensors, boolean includeAodOnlySensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningAodOnlySensors == includeAodOnlySensors) { return; } mListening = listen; mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningAodOnlySensors = includeAodOnlySensors; updateListening(); } /** * If sensors should be registered and sending signals. */ public void setListening(boolean listen, boolean includeTouchScreenSensors, boolean lowPowerStateOrOff) { public void setListeningWithPowerState(boolean listen, boolean includeTouchScreenSensors, boolean includeAodRequiringSensors, boolean lowPowerStateOrOff) { final boolean shouldRegisterProxSensors = !mSelectivelyRegisterProxSensors || lowPowerStateOrOff; if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningProxSensors == shouldRegisterProxSensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningProxSensors == shouldRegisterProxSensors && mListeningAodOnlySensors == includeAodRequiringSensors ) { return; } mListening = listen; mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningProxSensors = shouldRegisterProxSensors; mListeningAodOnlySensors = includeAodRequiringSensors; updateListening(); } Loading @@ -391,7 +413,8 @@ public class DozeSensors { for (TriggerSensor s : mTriggerSensors) { boolean listen = mListening && (!s.mRequiresTouchscreen || mListeningTouchScreenSensors) && (!s.mRequiresProx || mListeningProxSensors); && (!s.mRequiresProx || mListeningProxSensors) && (!s.mRequiresAod || mListeningAodOnlySensors); s.setListening(listen); if (listen) { anyListening = true; Loading Loading @@ -499,6 +522,9 @@ public class DozeSensors { private final boolean mRequiresTouchscreen; 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. // If false, the sensor registration will be updated on the next AOD state transition. private final boolean mImmediatelyReRegister; Loading Loading @@ -527,7 +553,8 @@ public class DozeSensors { requiresTouchscreen, false /* ignoresSetting */, false /* requiresProx */, true /* immediatelyReRegister */ true /* immediatelyReRegister */, false ); } Loading @@ -541,7 +568,8 @@ public class DozeSensors { boolean requiresTouchscreen, boolean ignoresSetting, boolean requiresProx, boolean immediatelyReRegister boolean immediatelyReRegister, boolean requiresAod ) { this( new Sensor[]{ sensor }, Loading @@ -554,7 +582,8 @@ public class DozeSensors { ignoresSetting, requiresProx, immediatelyReRegister, DevicePostureController.DEVICE_POSTURE_UNKNOWN DevicePostureController.DEVICE_POSTURE_UNKNOWN, requiresAod ); } Loading @@ -569,7 +598,8 @@ public class DozeSensors { boolean ignoresSetting, boolean requiresProx, boolean immediatelyReRegister, @DevicePostureController.DevicePostureInt int posture @DevicePostureController.DevicePostureInt int posture, boolean requiresAod ) { mSensors = sensors; mSetting = setting; Loading @@ -580,6 +610,7 @@ public class DozeSensors { mRequiresTouchscreen = requiresTouchscreen; mIgnoresSetting = ignoresSetting; mRequiresProx = requiresProx; mRequiresAod = requiresAod; mPosture = posture; mImmediatelyReRegister = immediatelyReRegister; } Loading packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +15 −5 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class DozeTriggers implements DozeMachine.Part { private boolean mWantProxSensor; private boolean mWantTouchScreenSensors; private boolean mWantSensors; private boolean mInAod; private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { Loading Loading @@ -460,12 +461,19 @@ public class DozeTriggers implements DozeMachine.Part { mDozeSensors.requestTemporaryDisable(); break; case DOZE: mAodInterruptRunnable = null; mWantProxSensor = false; mWantSensors = true; mWantTouchScreenSensors = true; mInAod = false; break; case DOZE_AOD: mAodInterruptRunnable = null; mWantProxSensor = newState != DozeMachine.State.DOZE; mWantProxSensor = true; mWantSensors = true; mWantTouchScreenSensors = true; if (newState == DozeMachine.State.DOZE_AOD && !sWakeDisplaySensorState) { mInAod = true; if (!sWakeDisplaySensorState) { onWakeScreen(false, newState, DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE); } break; Loading @@ -491,7 +499,7 @@ public class DozeTriggers implements DozeMachine.Part { break; default: } mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, mInAod); } private void registerCallbacks() { Loading @@ -510,11 +518,12 @@ public class DozeTriggers implements DozeMachine.Part { private void stopListeningToAllTriggers() { unregisterCallbacks(); mDozeSensors.setListening(false, false); mDozeSensors.setListening(false, false, false); mDozeSensors.setProxListening(false); mWantSensors = false; mWantProxSensor = false; mWantTouchScreenSensors = false; mInAod = false; } @Override Loading @@ -523,7 +532,8 @@ public class DozeTriggers implements DozeMachine.Part { final boolean lowPowerStateOrOff = state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND || state == Display.STATE_OFF; mDozeSensors.setProxListening(mWantProxSensor && lowPowerStateOrOff); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, lowPowerStateOrOff); mDozeSensors.setListeningWithPowerState(mWantSensors, mWantTouchScreenSensors, mInAod, lowPowerStateOrOff); if (mAodInterruptRunnable != null && state == Display.STATE_ON) { mAodInterruptRunnable.run(); Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +89 −36 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSensorDebounce() { mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class)); mTestableLooper.processAllMessages(); Loading @@ -162,7 +162,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSetListening_firstTrue_registerSettingsObserver() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class)); } Loading @@ -170,8 +170,8 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); mDozeSensors.setListening(true, true, true); verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class)); } Loading @@ -196,7 +196,7 @@ public class DozeSensorsTest extends SysuiTestCase { assertFalse(mSensorTap.mRequested); // 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 assertTrue(mSensorTap.mRequested); Loading @@ -207,12 +207,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true); // GIVEN a trigger sensor // GIVEN a trigger sensor that's enabled by settings Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled */ true, /* requiresTouchScreen */ true); /* settingEnabled */ true ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -228,12 +228,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled 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); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ false, /* requiresTouchScreen */ true); /* settingEnabled*/ false ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -249,12 +249,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled 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); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ false, /* requiresTouchScreen */ true); /* settingEnabled*/ false ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -264,7 +264,7 @@ public class DozeSensorsTest extends SysuiTestCase { // WHEN ignoreSetting is called triggerSensor.ignoreSetting(true); // THEN the sensor is registered // THEN the sensor is still registered since the setting is ignore assertTrue(triggerSensor.mRegistered); } Loading @@ -275,10 +275,10 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN a trigger sensor Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ true, /* requiresTouchScreen */ true); /* settingEnabled*/ true ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -295,7 +295,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading @@ -316,7 +316,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading Loading @@ -345,7 +345,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading Loading @@ -400,7 +400,7 @@ public class DozeSensorsTest extends SysuiTestCase { public void testUdfpsEnrollmentChanged() throws Exception { // GIVEN a UDFPS_LONG_PRESS trigger sensor that's not configured Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( mockSensor, REASON_SENSOR_UDFPS_LONG_PRESS, /* configured */ false); Loading @@ -409,7 +409,7 @@ public class DozeSensorsTest extends SysuiTestCase { .thenReturn(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 assertFalse(triggerSensor.mConfigured); Loading Loading @@ -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 public void liftToWake_defaultSetting_configDefaultFalse() { // WHEN the default lift to wake gesture setting is false Loading Loading @@ -494,8 +523,8 @@ public class DozeSensorsTest extends SysuiTestCase { mTriggerSensors = new TriggerSensor[] {mTriggerSensor, mSensorTap}; } public TriggerSensor createDozeSensor(Sensor sensor, boolean settingEnabled, boolean requiresTouchScreen) { public TriggerSensor createDozeSensorWithSettingEnabled(Sensor sensor, boolean settingEnabled) { return new TriggerSensor(/* sensor */ sensor, /* setting name */ "test_setting", /* settingDefault */ settingEnabled, Loading @@ -504,11 +533,13 @@ public class DozeSensorsTest extends SysuiTestCase { /* reportsTouchCoordinate*/ false, /* requiresTouchscreen */ false, /* ignoresSetting */ false, requiresTouchScreen, /* immediatelyReRegister */ true); /* requiresProx */ false, /* immediatelyReRegister */ true, /* requiresAod */false ); } public TriggerSensor createDozeSensor( public TriggerSensor createDozeSensorForPosture( Sensor sensor, int pulseReason, boolean configured Loading @@ -522,15 +553,35 @@ public class DozeSensorsTest extends SysuiTestCase { /* requiresTouchscreen */ false, /* ignoresSetting */ false, /* requiresTouchScreen */ false, /* immediatelyReRegister*/ true); /* immediatelyReRegister*/ true, false ); } /** * Create a doze sensor that requires Aod */ 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 * Create a doze sensor that supports postures and is enabled */ public TriggerSensor createDozeSensor(Sensor[] sensors, int posture) { public TriggerSensor createDozeSensorForPosture(Sensor[] sensors, int posture) { return new TriggerSensor(/* sensor */ sensors, /* setting name */ "test_setting", /* setting name */ "posture_test_setting", /* settingDefault */ true, /* configured */ true, /* pulseReason*/ 0, Loading @@ -539,7 +590,9 @@ public class DozeSensorsTest extends SysuiTestCase { /* ignoresSetting */ true, /* requiresProx */ false, /* immediatelyReRegister */ true, posture); posture, /* requiresUi */ false ); } public void addSensor(TriggerSensor sensor) { Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,14 @@ public class DozeTriggersTest extends SysuiTestCase { 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() { mExecutor.runAllReady(); } Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +51 −20 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public class DozeSensors { private boolean mListening; private boolean mListeningTouchScreenSensors; private boolean mListeningProxSensors; private boolean mListeningAodOnlySensors; private boolean mUdfpsEnrolled; @DevicePostureController.DevicePostureInt Loading Loading @@ -184,7 +185,8 @@ public class DozeSensors { dozeParameters.getPulseOnSigMotion(), DozeLog.PULSE_REASON_SENSOR_SIGMOTION, false /* touchCoords */, false /* touchscreen */), false /* touchscreen */ ), new TriggerSensor( mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE), Settings.Secure.DOZE_PICK_UP_GESTURE, Loading @@ -195,14 +197,17 @@ public class DozeSensors { false /* touchscreen */, false /* ignoresSetting */, false /* requires prox */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), new TriggerSensor( findSensor(config.doubleTapSensorType()), Settings.Secure.DOZE_DOUBLE_TAP_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_DOUBLE_TAP, dozeParameters.doubleTapReportsTouchCoordinates(), true /* touchscreen */), true /* touchscreen */ ), new TriggerSensor( findSensors(config.tapSensorTypeMapping()), Settings.Secure.DOZE_TAP_SCREEN_GESTURE, Loading @@ -214,7 +219,9 @@ public class DozeSensors { false /* ignoresSetting */, dozeParameters.singleTapUsesProx(mDevicePosture) /* requiresProx */, true /* immediatelyReRegister */, mDevicePosture), mDevicePosture, false ), new TriggerSensor( findSensor(config.longPressSensorType()), Settings.Secure.DOZE_PULSE_ON_LONG_PRESS, Loading @@ -225,7 +232,9 @@ public class DozeSensors { true /* touchscreen */, false /* ignoresSetting */, dozeParameters.longPressUsesProx() /* requiresProx */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), new TriggerSensor( findSensor(config.udfpsLongPressSensorType()), "doze_pulse_on_auth", Loading @@ -236,7 +245,9 @@ public class DozeSensors { true /* touchscreen */, false /* ignoresSetting */, dozeParameters.longPressUsesProx(), false /* immediatelyReRegister */), false /* immediatelyReRegister */, true /* requiresAod */ ), new PluginSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, Loading @@ -244,7 +255,8 @@ public class DozeSensors { && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT), DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE, false /* reports touch coordinates */, false /* touchscreen */), false /* touchscreen */ ), new PluginSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_LOCK_SCREEN), Settings.Secure.DOZE_WAKE_LOCK_SCREEN_GESTURE, Loading @@ -252,7 +264,8 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_WAKE_REACH, false /* reports touch coordinates */, false /* touchscreen */, mConfig.getWakeLockScreenDebounce()), mConfig.getWakeLockScreenDebounce() ), new TriggerSensor( findSensor(config.quickPickupSensorType()), Settings.Secure.DOZE_QUICK_PICKUP_GESTURE, Loading @@ -263,7 +276,9 @@ public class DozeSensors { false /* requiresTouchscreen */, false /* ignoresSetting */, false /* requiresProx */, true /* immediatelyReRegister */), true /* immediatelyReRegister */, false /* requiresAod */ ), }; setProxListening(false); // Don't immediately start listening when we register. mProximitySensor.register( Loading Loading @@ -357,29 +372,36 @@ public class DozeSensors { /** * If sensors should be registered and sending signals. */ public void setListening(boolean listen, boolean includeTouchScreenSensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors) { public void setListening(boolean listen, boolean includeTouchScreenSensors, boolean includeAodOnlySensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningAodOnlySensors == includeAodOnlySensors) { return; } mListening = listen; mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningAodOnlySensors = includeAodOnlySensors; updateListening(); } /** * If sensors should be registered and sending signals. */ public void setListening(boolean listen, boolean includeTouchScreenSensors, boolean lowPowerStateOrOff) { public void setListeningWithPowerState(boolean listen, boolean includeTouchScreenSensors, boolean includeAodRequiringSensors, boolean lowPowerStateOrOff) { final boolean shouldRegisterProxSensors = !mSelectivelyRegisterProxSensors || lowPowerStateOrOff; if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningProxSensors == shouldRegisterProxSensors) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors && mListeningProxSensors == shouldRegisterProxSensors && mListeningAodOnlySensors == includeAodRequiringSensors ) { return; } mListening = listen; mListeningTouchScreenSensors = includeTouchScreenSensors; mListeningProxSensors = shouldRegisterProxSensors; mListeningAodOnlySensors = includeAodRequiringSensors; updateListening(); } Loading @@ -391,7 +413,8 @@ public class DozeSensors { for (TriggerSensor s : mTriggerSensors) { boolean listen = mListening && (!s.mRequiresTouchscreen || mListeningTouchScreenSensors) && (!s.mRequiresProx || mListeningProxSensors); && (!s.mRequiresProx || mListeningProxSensors) && (!s.mRequiresAod || mListeningAodOnlySensors); s.setListening(listen); if (listen) { anyListening = true; Loading Loading @@ -499,6 +522,9 @@ public class DozeSensors { private final boolean mRequiresTouchscreen; 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. // If false, the sensor registration will be updated on the next AOD state transition. private final boolean mImmediatelyReRegister; Loading Loading @@ -527,7 +553,8 @@ public class DozeSensors { requiresTouchscreen, false /* ignoresSetting */, false /* requiresProx */, true /* immediatelyReRegister */ true /* immediatelyReRegister */, false ); } Loading @@ -541,7 +568,8 @@ public class DozeSensors { boolean requiresTouchscreen, boolean ignoresSetting, boolean requiresProx, boolean immediatelyReRegister boolean immediatelyReRegister, boolean requiresAod ) { this( new Sensor[]{ sensor }, Loading @@ -554,7 +582,8 @@ public class DozeSensors { ignoresSetting, requiresProx, immediatelyReRegister, DevicePostureController.DEVICE_POSTURE_UNKNOWN DevicePostureController.DEVICE_POSTURE_UNKNOWN, requiresAod ); } Loading @@ -569,7 +598,8 @@ public class DozeSensors { boolean ignoresSetting, boolean requiresProx, boolean immediatelyReRegister, @DevicePostureController.DevicePostureInt int posture @DevicePostureController.DevicePostureInt int posture, boolean requiresAod ) { mSensors = sensors; mSetting = setting; Loading @@ -580,6 +610,7 @@ public class DozeSensors { mRequiresTouchscreen = requiresTouchscreen; mIgnoresSetting = ignoresSetting; mRequiresProx = requiresProx; mRequiresAod = requiresAod; mPosture = posture; mImmediatelyReRegister = immediatelyReRegister; } Loading
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +15 −5 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class DozeTriggers implements DozeMachine.Part { private boolean mWantProxSensor; private boolean mWantTouchScreenSensors; private boolean mWantSensors; private boolean mInAod; private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { Loading Loading @@ -460,12 +461,19 @@ public class DozeTriggers implements DozeMachine.Part { mDozeSensors.requestTemporaryDisable(); break; case DOZE: mAodInterruptRunnable = null; mWantProxSensor = false; mWantSensors = true; mWantTouchScreenSensors = true; mInAod = false; break; case DOZE_AOD: mAodInterruptRunnable = null; mWantProxSensor = newState != DozeMachine.State.DOZE; mWantProxSensor = true; mWantSensors = true; mWantTouchScreenSensors = true; if (newState == DozeMachine.State.DOZE_AOD && !sWakeDisplaySensorState) { mInAod = true; if (!sWakeDisplaySensorState) { onWakeScreen(false, newState, DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE); } break; Loading @@ -491,7 +499,7 @@ public class DozeTriggers implements DozeMachine.Part { break; default: } mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, mInAod); } private void registerCallbacks() { Loading @@ -510,11 +518,12 @@ public class DozeTriggers implements DozeMachine.Part { private void stopListeningToAllTriggers() { unregisterCallbacks(); mDozeSensors.setListening(false, false); mDozeSensors.setListening(false, false, false); mDozeSensors.setProxListening(false); mWantSensors = false; mWantProxSensor = false; mWantTouchScreenSensors = false; mInAod = false; } @Override Loading @@ -523,7 +532,8 @@ public class DozeTriggers implements DozeMachine.Part { final boolean lowPowerStateOrOff = state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND || state == Display.STATE_OFF; mDozeSensors.setProxListening(mWantProxSensor && lowPowerStateOrOff); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors, lowPowerStateOrOff); mDozeSensors.setListeningWithPowerState(mWantSensors, mWantTouchScreenSensors, mInAod, lowPowerStateOrOff); if (mAodInterruptRunnable != null && state == Display.STATE_ON) { mAodInterruptRunnable.run(); Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +89 −36 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSensorDebounce() { mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class)); mTestableLooper.processAllMessages(); Loading @@ -162,7 +162,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSetListening_firstTrue_registerSettingsObserver() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class)); } Loading @@ -170,8 +170,8 @@ public class DozeSensorsTest extends SysuiTestCase { @Test public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true); mDozeSensors.setListening(true, true, true); mDozeSensors.setListening(true, true, true); verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class)); } Loading @@ -196,7 +196,7 @@ public class DozeSensorsTest extends SysuiTestCase { assertFalse(mSensorTap.mRequested); // 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 assertTrue(mSensorTap.mRequested); Loading @@ -207,12 +207,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true); // GIVEN a trigger sensor // GIVEN a trigger sensor that's enabled by settings Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled */ true, /* requiresTouchScreen */ true); /* settingEnabled */ true ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -228,12 +228,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled 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); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ false, /* requiresTouchScreen */ true); /* settingEnabled*/ false ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -249,12 +249,12 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensors enabled 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); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ false, /* requiresTouchScreen */ true); /* settingEnabled*/ false ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -264,7 +264,7 @@ public class DozeSensorsTest extends SysuiTestCase { // WHEN ignoreSetting is called triggerSensor.ignoreSetting(true); // THEN the sensor is registered // THEN the sensor is still registered since the setting is ignore assertTrue(triggerSensor.mRegistered); } Loading @@ -275,10 +275,10 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN a trigger sensor Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorWithSettingEnabled( mockSensor, /* settingEnabled*/ true, /* requiresTouchScreen */ true); /* settingEnabled*/ true ); when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor))) .thenReturn(true); Loading @@ -295,7 +295,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading @@ -316,7 +316,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading Loading @@ -345,7 +345,7 @@ public class DozeSensorsTest extends SysuiTestCase { // GIVEN doze sensor that supports postures Sensor closedSensor = createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); Sensor openedSensor = createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_LIGHT); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( new Sensor[] { null /* unknown */, closedSensor, Loading Loading @@ -400,7 +400,7 @@ public class DozeSensorsTest extends SysuiTestCase { public void testUdfpsEnrollmentChanged() throws Exception { // GIVEN a UDFPS_LONG_PRESS trigger sensor that's not configured Sensor mockSensor = mock(Sensor.class); TriggerSensor triggerSensor = mDozeSensors.createDozeSensor( TriggerSensor triggerSensor = mDozeSensors.createDozeSensorForPosture( mockSensor, REASON_SENSOR_UDFPS_LONG_PRESS, /* configured */ false); Loading @@ -409,7 +409,7 @@ public class DozeSensorsTest extends SysuiTestCase { .thenReturn(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 assertFalse(triggerSensor.mConfigured); Loading Loading @@ -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 public void liftToWake_defaultSetting_configDefaultFalse() { // WHEN the default lift to wake gesture setting is false Loading Loading @@ -494,8 +523,8 @@ public class DozeSensorsTest extends SysuiTestCase { mTriggerSensors = new TriggerSensor[] {mTriggerSensor, mSensorTap}; } public TriggerSensor createDozeSensor(Sensor sensor, boolean settingEnabled, boolean requiresTouchScreen) { public TriggerSensor createDozeSensorWithSettingEnabled(Sensor sensor, boolean settingEnabled) { return new TriggerSensor(/* sensor */ sensor, /* setting name */ "test_setting", /* settingDefault */ settingEnabled, Loading @@ -504,11 +533,13 @@ public class DozeSensorsTest extends SysuiTestCase { /* reportsTouchCoordinate*/ false, /* requiresTouchscreen */ false, /* ignoresSetting */ false, requiresTouchScreen, /* immediatelyReRegister */ true); /* requiresProx */ false, /* immediatelyReRegister */ true, /* requiresAod */false ); } public TriggerSensor createDozeSensor( public TriggerSensor createDozeSensorForPosture( Sensor sensor, int pulseReason, boolean configured Loading @@ -522,15 +553,35 @@ public class DozeSensorsTest extends SysuiTestCase { /* requiresTouchscreen */ false, /* ignoresSetting */ false, /* requiresTouchScreen */ false, /* immediatelyReRegister*/ true); /* immediatelyReRegister*/ true, false ); } /** * Create a doze sensor that requires Aod */ 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 * Create a doze sensor that supports postures and is enabled */ public TriggerSensor createDozeSensor(Sensor[] sensors, int posture) { public TriggerSensor createDozeSensorForPosture(Sensor[] sensors, int posture) { return new TriggerSensor(/* sensor */ sensors, /* setting name */ "test_setting", /* setting name */ "posture_test_setting", /* settingDefault */ true, /* configured */ true, /* pulseReason*/ 0, Loading @@ -539,7 +590,9 @@ public class DozeSensorsTest extends SysuiTestCase { /* ignoresSetting */ true, /* requiresProx */ false, /* immediatelyReRegister */ true, posture); posture, /* requiresUi */ false ); } public void addSensor(TriggerSensor sensor) { Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,14 @@ public class DozeTriggersTest extends SysuiTestCase { 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() { mExecutor.runAllReady(); } Loading