Merge "[FoldableDeviceStateProvider] Do not listen to hall sensor when not used" into 24D1-dev
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
index bc264a4..b5fb48f 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
@@ -90,6 +90,12 @@
final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
mEnablePostureBasedClosedState = featureFlags.enableFoldablesPostureBasedClosedState();
+ if (mEnablePostureBasedClosedState) {
+ // This configuration doesn't require listening to hall sensor, it solely relies
+ // on the fused hinge angle sensor
+ hallSensor = null;
+ }
+
mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking();
final DeviceStateConfiguration[] configuration = createConfiguration(
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
index 42e41d5..2736521 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
@@ -96,6 +96,7 @@
private final Sensor mHingeAngleSensor;
private final DisplayManager mDisplayManager;
+ @Nullable
private final Sensor mHallSensor;
private static final Predicate<FoldableDeviceStateProvider> ALLOWED = p -> true;
@@ -123,7 +124,7 @@
@NonNull Context context,
@NonNull SensorManager sensorManager,
@NonNull Sensor hingeAngleSensor,
- @NonNull Sensor hallSensor,
+ @Nullable Sensor hallSensor,
@NonNull DisplayManager displayManager,
@NonNull DeviceStateConfiguration[] deviceStateConfigurations) {
this(new FeatureFlagsImpl(), context, sensorManager, hingeAngleSensor, hallSensor,
@@ -136,7 +137,7 @@
@NonNull Context context,
@NonNull SensorManager sensorManager,
@NonNull Sensor hingeAngleSensor,
- @NonNull Sensor hallSensor,
+ @Nullable Sensor hallSensor,
@NonNull DisplayManager displayManager,
@NonNull DeviceStateConfiguration[] deviceStateConfigurations) {
@@ -150,7 +151,9 @@
mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking();
sensorManager.registerListener(this, mHingeAngleSensor, SENSOR_DELAY_FASTEST);
- sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST);
+ if (hallSensor != null) {
+ sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST);
+ }
mOrderedStates = new DeviceState[deviceStateConfigurations.length];
for (int i = 0; i < deviceStateConfigurations.length; i++) {
@@ -326,7 +329,7 @@
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (mLock) {
- if (event.sensor == mHallSensor) {
+ if (mHallSensor != null && event.sensor == mHallSensor) {
mLastHallSensorEvent = event;
} else if (event.sensor == mHingeAngleSensor) {
mLastHingeAngleSensorEvent = event;
@@ -361,11 +364,11 @@
}
@GuardedBy("mLock")
- private void dumpSensorValues(Sensor sensor, @Nullable SensorEvent event) {
+ private void dumpSensorValues(@Nullable Sensor sensor, @Nullable SensorEvent event) {
Slog.i(TAG, toSensorValueString(sensor, event));
}
- private String toSensorValueString(Sensor sensor, @Nullable SensorEvent event) {
+ private String toSensorValueString(@Nullable Sensor sensor, @Nullable SensorEvent event) {
String sensorString = sensor == null ? "null" : sensor.getName();
String eventValues = event == null ? "null" : Arrays.toString(event.values);
return sensorString + " : " + eventValues;
diff --git a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
index 901f24d..9f07aa8 100644
--- a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
+++ b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
@@ -219,6 +219,26 @@
}
@Test
+ public void test_postureBasedClosedState_createPolicy_doesNotRegisterHallSensor() {
+ mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, true);
+ clearInvocations(mSensorManager);
+
+ mInstrumentation.runOnMainSync(() -> mProvider = createProvider());
+
+ verify(mSensorManager, never()).registerListener(any(), eq(mHallSensor), anyInt());
+ }
+
+ @Test
+ public void test_postureBasedClosedStateDisabled_createPolicy_registersHallSensor() {
+ mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, false);
+ clearInvocations(mSensorManager);
+
+ mInstrumentation.runOnMainSync(() -> mProvider = createProvider());
+
+ verify(mSensorManager).registerListener(any(), eq(mHallSensor), anyInt());
+ }
+
+ @Test
public void test_noSensorEventsYet_reportOpenedState() {
mProvider.setListener(mListener);
verify(mListener).onStateChanged(mDeviceStateCaptor.capture());