Don't unregister doze sensors that have been requested
Previously, if we were already registered for the sensor, we may mistakenly unregister for it even though we still wanted to listen for it. Test: atest DozeSensorsTest Fixes: 197100880 Change-Id: Iaba61e10472dd61b95aac2002301dbf29c2cad8a
This commit is contained in:
@@ -456,13 +456,24 @@ public class DozeSensors {
|
||||
|
||||
public void updateListening() {
|
||||
if (!mConfigured || mSensor == null) return;
|
||||
if (mRequested && !mDisabled && (enabledBySetting() || mIgnoresSetting)
|
||||
&& !mRegistered) {
|
||||
mRegistered = mSensorManager.requestTriggerSensor(this, mSensor);
|
||||
if (DEBUG) Log.d(TAG, "requestTriggerSensor " + mRegistered);
|
||||
if (mRequested && !mDisabled && (enabledBySetting() || mIgnoresSetting)) {
|
||||
if (!mRegistered) {
|
||||
mRegistered = mSensorManager.requestTriggerSensor(this, mSensor);
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "requestTriggerSensor[" + mSensor
|
||||
+ "] " + mRegistered);
|
||||
}
|
||||
} else {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "requestTriggerSensor[" + mSensor
|
||||
+ "] already registered");
|
||||
}
|
||||
}
|
||||
} else if (mRegistered) {
|
||||
final boolean rt = mSensorManager.cancelTriggerSensor(this, mSensor);
|
||||
if (DEBUG) Log.d(TAG, "cancelTriggerSensor " + rt);
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "cancelTriggerSensor[" + mSensor + "] " + rt);
|
||||
}
|
||||
mRegistered = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
private FakeSettings mFakeSettings = new FakeSettings();
|
||||
private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener;
|
||||
private TestableLooper mTestableLooper;
|
||||
private DozeSensors mDozeSensors;
|
||||
private TestableDozeSensors mDozeSensors;
|
||||
private TriggerSensor mSensorTap;
|
||||
|
||||
@Before
|
||||
@@ -170,6 +170,94 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
assertTrue(mSensorTap.mRequested);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozeSensorSetListening() {
|
||||
// GIVEN doze sensors enabled
|
||||
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
|
||||
|
||||
// GIVEN a trigger sensor
|
||||
Sensor mockSensor = mock(Sensor.class);
|
||||
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor(
|
||||
mockSensor,
|
||||
/* settingEnabled */ true,
|
||||
/* requiresTouchScreen */ true);
|
||||
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN we want to listen for the trigger sensor
|
||||
triggerSensor.setListening(true);
|
||||
|
||||
// THEN the sensor is registered
|
||||
assertTrue(triggerSensor.mRegistered);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozeSensorSettingDisabled() {
|
||||
// GIVEN doze sensors enabled
|
||||
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
|
||||
|
||||
// GIVEN a trigger sensor
|
||||
Sensor mockSensor = mock(Sensor.class);
|
||||
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor(
|
||||
mockSensor,
|
||||
/* settingEnabled*/ false,
|
||||
/* requiresTouchScreen */ true);
|
||||
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN setListening is called
|
||||
triggerSensor.setListening(true);
|
||||
|
||||
// THEN the sensor is not registered
|
||||
assertFalse(triggerSensor.mRegistered);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozeSensorIgnoreSetting() {
|
||||
// GIVEN doze sensors enabled
|
||||
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
|
||||
|
||||
// GIVEN a trigger sensor that's
|
||||
Sensor mockSensor = mock(Sensor.class);
|
||||
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor(
|
||||
mockSensor,
|
||||
/* settingEnabled*/ false,
|
||||
/* requiresTouchScreen */ true);
|
||||
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
|
||||
.thenReturn(true);
|
||||
|
||||
// GIVEN sensor is listening
|
||||
triggerSensor.setListening(true);
|
||||
|
||||
// WHEN ignoreSetting is called
|
||||
triggerSensor.ignoreSetting(true);
|
||||
|
||||
// THEN the sensor is registered
|
||||
assertTrue(triggerSensor.mRegistered);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateListeningAfterAlreadyRegistered() {
|
||||
// GIVEN doze sensors enabled
|
||||
when(mAmbientDisplayConfiguration.enabled(anyInt())).thenReturn(true);
|
||||
|
||||
// GIVEN a trigger sensor
|
||||
Sensor mockSensor = mock(Sensor.class);
|
||||
TriggerSensor triggerSensor = mDozeSensors.createDozeSensor(
|
||||
mockSensor,
|
||||
/* settingEnabled*/ true,
|
||||
/* requiresTouchScreen */ true);
|
||||
when(mSensorManager.requestTriggerSensor(eq(triggerSensor), eq(mockSensor)))
|
||||
.thenReturn(true);
|
||||
|
||||
// WHEN setListening is called AND updateListening is called
|
||||
triggerSensor.setListening(true);
|
||||
triggerSensor.updateListening();
|
||||
|
||||
// THEN the sensor is still registered
|
||||
assertTrue(triggerSensor.mRegistered);
|
||||
}
|
||||
|
||||
private class TestableDozeSensors extends DozeSensors {
|
||||
|
||||
TestableDozeSensors() {
|
||||
@@ -187,5 +275,17 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
}
|
||||
mSensors = new TriggerSensor[] {mTriggerSensor, mSensorTap};
|
||||
}
|
||||
|
||||
public TriggerSensor createDozeSensor(Sensor sensor, boolean settingEnabled,
|
||||
boolean requiresTouchScreen) {
|
||||
return new TriggerSensor(/* sensor */ sensor,
|
||||
/* setting name */ "test_setting",
|
||||
/* settingDefault */ settingEnabled,
|
||||
/* configured */ true,
|
||||
/* pulseReason*/ 0,
|
||||
/* reportsTouchCoordinate*/ false,
|
||||
requiresTouchScreen,
|
||||
mDozeLog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user