Merge "Allow awaitLux to fetch a value after destroy." into tm-qpr-dev am: 6296e1121f

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

Change-Id: I3fa63b54df8a08e3526656ffe1d3c1f123f93368
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Joe Bolinger
2022-11-16 01:57:05 +00:00
committed by Automerger Merge Worker
2 changed files with 24 additions and 14 deletions

View File

@@ -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 a final consumer is set it will call destroy/disable on the next value if requested
if (!mDestroyed && mNextConsumer == null) { 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 a final consumer is set it will call destroy/disable on the next value if requested
if (!mDestroyed && mNextConsumer == null) { if (!mDestroyed && mNextConsumer == null) {
disableLightSensorLoggingLocked(); disableLightSensorLoggingLocked(true /* destroying */);
mDestroyed = true; mDestroyed = true;
} }
} }
@@ -177,11 +177,10 @@ final class ALSProbe implements Probe {
final float current = mLastAmbientLux; final float current = mLastAmbientLux;
if (current > -1f) { if (current > -1f) {
nextConsumer.consume(current); nextConsumer.consume(current);
} else if (mDestroyed) {
nextConsumer.consume(-1f);
} else if (mNextConsumer != null) { } else if (mNextConsumer != null) {
mNextConsumer.add(nextConsumer); mNextConsumer.add(nextConsumer);
} else { } else {
mDestroyed = false;
mNextConsumer = nextConsumer; mNextConsumer = nextConsumer;
enableLightSensorLoggingLocked(); enableLightSensorLoggingLocked();
} }
@@ -199,12 +198,14 @@ final class ALSProbe implements Probe {
resetTimerLocked(true /* start */); resetTimerLocked(true /* start */);
} }
private void disableLightSensorLoggingLocked() { private void disableLightSensorLoggingLocked(boolean destroying) {
resetTimerLocked(false /* start */); resetTimerLocked(false /* start */);
if (mEnabled) { if (mEnabled) {
mEnabled = false; mEnabled = false;
if (!destroying) {
mLastAmbientLux = -1; mLastAmbientLux = -1;
}
mSensorManager.unregisterListener(mLightSensorListener); mSensorManager.unregisterListener(mLightSensorListener);
Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode()); Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode());
} }

View File

@@ -125,12 +125,9 @@ public class ALSProbeTest {
mProbe.destroy(); mProbe.destroy();
mProbe.enable(); mProbe.enable();
AtomicInteger lux = new AtomicInteger(10);
mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */);
verify(mSensorManager, never()).registerListener(any(), any(), anyInt()); verify(mSensorManager, never()).registerListener(any(), any(), anyInt());
verifyNoMoreInteractions(mSensorManager); verifyNoMoreInteractions(mSensorManager);
assertThat(lux.get()).isLessThan(0); assertThat(mProbe.getMostRecentLux()).isLessThan(0);
} }
@Test @Test
@@ -323,15 +320,27 @@ public class ALSProbeTest {
} }
@Test @Test
public void testNoNextLuxWhenDestroyed() { public void testDestroyAllowsAwaitLuxExactlyOnce() {
final float lastValue = 5.5f;
mProbe.destroy(); mProbe.destroy();
AtomicInteger lux = new AtomicInteger(-20); AtomicInteger lux = new AtomicInteger(10);
mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */); mProbe.awaitNextLux((v) -> lux.set(Math.round(v)), null /* handler */);
assertThat(lux.get()).isEqualTo(-1); verify(mSensorManager).registerListener(
verify(mSensorManager, never()).registerListener(
mSensorEventListenerCaptor.capture(), any(), anyInt()); 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); verifyNoMoreInteractions(mSensorManager);
} }