diff options
| -rw-r--r-- | services/core/java/com/android/server/biometrics/log/ALSProbe.java | 13 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java | 25 |
2 files changed, 24 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/biometrics/log/ALSProbe.java b/services/core/java/com/android/server/biometrics/log/ALSProbe.java index da4361843681..d584c99cea72 100644 --- a/services/core/java/com/android/server/biometrics/log/ALSProbe.java +++ b/services/core/java/com/android/server/biometrics/log/ALSProbe.java @@ -120,7 +120,7 @@ final class ALSProbe implements Probe { // if a final consumer is set it will call destroy/disable on the next value if requested if (!mDestroyed && mNextConsumer == null) { - disableLightSensorLoggingLocked(); + disableLightSensorLoggingLocked(false /* destroying */); } } @@ -130,7 +130,7 @@ final class ALSProbe implements Probe { // if a final consumer is set it will call destroy/disable on the next value if requested if (!mDestroyed && mNextConsumer == null) { - disableLightSensorLoggingLocked(); + disableLightSensorLoggingLocked(true /* destroying */); mDestroyed = true; } } @@ -177,11 +177,10 @@ final class ALSProbe implements Probe { final float current = mLastAmbientLux; if (current > -1f) { nextConsumer.consume(current); - } else if (mDestroyed) { - nextConsumer.consume(-1f); } else if (mNextConsumer != null) { mNextConsumer.add(nextConsumer); } else { + mDestroyed = false; mNextConsumer = nextConsumer; enableLightSensorLoggingLocked(); } @@ -199,12 +198,14 @@ final class ALSProbe implements Probe { resetTimerLocked(true /* start */); } - private void disableLightSensorLoggingLocked() { + private void disableLightSensorLoggingLocked(boolean destroying) { resetTimerLocked(false /* start */); if (mEnabled) { mEnabled = false; - mLastAmbientLux = -1; + if (!destroying) { + mLastAmbientLux = -1; + } mSensorManager.unregisterListener(mLightSensorListener); Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode()); } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java b/services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java index 0cff4f14bf23..bb0063427339 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java @@ -125,12 +125,9 @@ public class ALSProbeTest { mProbe.destroy(); mProbe.enable(); - AtomicInteger lux = new AtomicInteger(10); - mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */); - verify(mSensorManager, never()).registerListener(any(), any(), anyInt()); verifyNoMoreInteractions(mSensorManager); - assertThat(lux.get()).isLessThan(0); + assertThat(mProbe.getMostRecentLux()).isLessThan(0); } @Test @@ -323,15 +320,27 @@ public class ALSProbeTest { } @Test - public void testNoNextLuxWhenDestroyed() { + public void testDestroyAllowsAwaitLuxExactlyOnce() { + final float lastValue = 5.5f; mProbe.destroy(); - AtomicInteger lux = new AtomicInteger(-20); + AtomicInteger lux = new AtomicInteger(10); mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */); - assertThat(lux.get()).isEqualTo(-1); - verify(mSensorManager, never()).registerListener( + verify(mSensorManager).registerListener( mSensorEventListenerCaptor.capture(), any(), anyInt()); + mSensorEventListenerCaptor.getValue().onSensorChanged( + new SensorEvent(mLightSensor, 1, 1, new float[]{lastValue})); + + assertThat(lux.get()).isEqualTo(Math.round(lastValue)); + verify(mSensorManager).unregisterListener(eq(mSensorEventListenerCaptor.getValue())); + + lux.set(22); + mProbe.enable(); + mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */); + mProbe.enable(); + + assertThat(lux.get()).isEqualTo(Math.round(lastValue)); verifyNoMoreInteractions(mSensorManager); } |