Merge "Don't unregister doze sensors that have been requested" into sc-qpr1-dev am: 1f1ec17fdc am: 1378749f63 am: c42f776d00

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15627249

Change-Id: I327514b1f71b9c483ba7d98655659733a3fbd02c
This commit is contained in:
Android Build Prod User
2021-08-25 14:44:37 +00:00
committed by Automerger Merge Worker
2 changed files with 117 additions and 6 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}