diff options
| author | 2024-04-19 17:12:54 +0000 | |
|---|---|---|
| committer | 2024-04-19 17:12:54 +0000 | |
| commit | ff603f83dfd9ab9b9db695c20b375e6460bd7cbf (patch) | |
| tree | 1d2452c8de68ec7b452b49d432f4dfb8a119b152 | |
| parent | d8b443089c66e41b5ed44c1c060122ce9bbc07ed (diff) | |
| parent | 1a12af54e0197a900fc5221d23eb15829d598104 (diff) | |
Merge "[FoldableDeviceStateProvider] Do not listen to hall sensor when not used" into 24D1-dev
3 files changed, 35 insertions, 6 deletions
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 bc264a46f051..b5fb48fbee99 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 @@ public class BookStyleDeviceStatePolicy extends DeviceStatePolicy implements 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 42e41d59cfeb..27365210e0a5 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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, 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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, 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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, @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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider, } @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 901f24dd9b0b..9f07aa8c1a41 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 @@ public final class BookStyleDeviceStatePolicyTest { } @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()); |