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:
@@ -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;
|
||||||
mLastAmbientLux = -1;
|
if (!destroying) {
|
||||||
|
mLastAmbientLux = -1;
|
||||||
|
}
|
||||||
mSensorManager.unregisterListener(mLightSensorListener);
|
mSensorManager.unregisterListener(mLightSensorListener);
|
||||||
Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode());
|
Slog.v(TAG, "Disable ALS: " + mLightSensorListener.hashCode());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user