Loading services/core/java/com/android/server/biometrics/log/ALSProbe.java +7 −6 Original line number Diff line number Diff line Loading @@ -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 */); } } Loading @@ -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; } } Loading Loading @@ -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(); } Loading @@ -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; if (!destroying) { mLastAmbientLux = -1; } mSensorManager.unregisterListener(mLightSensorListener); Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode()); } Loading services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } Loading Loading
services/core/java/com/android/server/biometrics/log/ALSProbe.java +7 −6 Original line number Diff line number Diff line Loading @@ -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 */); } } Loading @@ -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; } } Loading Loading @@ -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(); } Loading @@ -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; if (!destroying) { mLastAmbientLux = -1; } mSensorManager.unregisterListener(mLightSensorListener); Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode()); } Loading
services/tests/servicestests/src/com/android/server/biometrics/log/ALSProbeTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } Loading