Update BrightnessTracker to use same sensor as ABC.
Bug: 209948220
Test: manually check the sensor for BrightnessTracker using
dumpsys display.
Test: atest BrightnessTrackerTest
Change-Id: I20d93322cc42c28bc2c74c9ce048b0f550bb8127
This commit is contained in:
committed by
Chris Kuiper
parent
6f989effda
commit
817d2df3a7
@@ -131,6 +131,7 @@ public class BrightnessTracker {
|
||||
private static final int MSG_STOP_SENSOR_LISTENER = 2;
|
||||
private static final int MSG_START_SENSOR_LISTENER = 3;
|
||||
private static final int MSG_BRIGHTNESS_CONFIG_CHANGED = 4;
|
||||
private static final int MSG_SENSOR_CHANGED = 5;
|
||||
|
||||
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
|
||||
|
||||
@@ -158,6 +159,7 @@ public class BrightnessTracker {
|
||||
// These members should only be accessed on the mBgHandler thread.
|
||||
private BroadcastReceiver mBroadcastReceiver;
|
||||
private SensorListener mSensorListener;
|
||||
private Sensor mLightSensor;
|
||||
private SettingsObserver mSettingsObserver;
|
||||
private DisplayListener mDisplayListener;
|
||||
private boolean mSensorRegistered;
|
||||
@@ -327,6 +329,14 @@ public class BrightnessTracker {
|
||||
m.sendToTarget();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the light sensor to use.
|
||||
*/
|
||||
public void setLightSensor(Sensor lightSensor) {
|
||||
mBgHandler.obtainMessage(MSG_SENSOR_CHANGED, 0 /*unused*/, 0/*unused*/, lightSensor)
|
||||
.sendToTarget();
|
||||
}
|
||||
|
||||
private void handleBrightnessChanged(float brightness, boolean userInitiated,
|
||||
float powerBrightnessFactor, boolean isUserSetBrightness,
|
||||
boolean isDefaultBrightnessConfig, long timestamp, String uniqueDisplayId) {
|
||||
@@ -428,13 +438,28 @@ public class BrightnessTracker {
|
||||
}
|
||||
}
|
||||
|
||||
private void handleSensorChanged(Sensor lightSensor) {
|
||||
if (mLightSensor != lightSensor) {
|
||||
mLightSensor = lightSensor;
|
||||
stopSensorListener();
|
||||
synchronized (mDataCollectionLock) {
|
||||
mLastSensorReadings.clear();
|
||||
}
|
||||
// Attempt to restart the sensor listener. It will check to see if it should be running
|
||||
// so there is no need to also check here.
|
||||
startSensorListener();
|
||||
}
|
||||
}
|
||||
|
||||
private void startSensorListener() {
|
||||
if (!mSensorRegistered
|
||||
&& mLightSensor != null
|
||||
&& mAmbientBrightnessStatsTracker != null
|
||||
&& mInjector.isInteractive(mContext)
|
||||
&& mInjector.isBrightnessModeAutomatic(mContentResolver)) {
|
||||
mAmbientBrightnessStatsTracker.start();
|
||||
mSensorRegistered = true;
|
||||
mInjector.registerSensorListener(mContext, mSensorListener,
|
||||
mInjector.registerSensorListener(mContext, mSensorListener, mLightSensor,
|
||||
mInjector.getBackgroundHandler());
|
||||
}
|
||||
}
|
||||
@@ -736,6 +761,7 @@ public class BrightnessTracker {
|
||||
pw.println("BrightnessTracker state:");
|
||||
synchronized (mDataCollectionLock) {
|
||||
pw.println(" mStarted=" + mStarted);
|
||||
pw.println(" mLightSensor=" + mLightSensor);
|
||||
pw.println(" mLastBatteryLevel=" + mLastBatteryLevel);
|
||||
pw.println(" mLastBrightness=" + mLastBrightness);
|
||||
pw.println(" mLastSensorReadings.size=" + mLastSensorReadings.size());
|
||||
@@ -1017,6 +1043,9 @@ public class BrightnessTracker {
|
||||
disableColorSampling();
|
||||
}
|
||||
break;
|
||||
case MSG_SENSOR_CHANGED:
|
||||
handleSensorChanged((Sensor) msg.obj);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1045,9 +1074,8 @@ public class BrightnessTracker {
|
||||
@VisibleForTesting
|
||||
static class Injector {
|
||||
public void registerSensorListener(Context context,
|
||||
SensorEventListener sensorListener, Handler handler) {
|
||||
SensorEventListener sensorListener, Sensor lightSensor, Handler handler) {
|
||||
SensorManager sensorManager = context.getSystemService(SensorManager.class);
|
||||
Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
||||
sensorManager.registerListener(sensorListener,
|
||||
lightSensor, SensorManager.SENSOR_DELAY_NORMAL, handler);
|
||||
}
|
||||
|
||||
@@ -795,7 +795,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
private void loadFromDisplayDeviceConfig(IBinder token, DisplayDeviceInfo info) {
|
||||
// All properties that depend on the associated DisplayDevice and the DDC must be
|
||||
// updated here.
|
||||
loadAmbientLightSensor();
|
||||
loadBrightnessRampRates();
|
||||
loadProximitySensor();
|
||||
loadNitsRange(mContext.getResources());
|
||||
@@ -925,6 +924,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
}
|
||||
|
||||
loadAmbientLightSensor();
|
||||
if (mBrightnessTracker != null) {
|
||||
mBrightnessTracker.setLightSensor(mLightSensor);
|
||||
}
|
||||
|
||||
if (mAutomaticBrightnessController != null) {
|
||||
mAutomaticBrightnessController.stop();
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.database.ContentObserver;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.display.AmbientBrightnessDayStats;
|
||||
@@ -42,6 +43,7 @@ import android.hardware.display.ColorDisplayManager;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.hardware.display.DisplayedContentSample;
|
||||
import android.hardware.display.DisplayedContentSamplingAttributes;
|
||||
import android.hardware.input.InputSensorInfo;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
@@ -63,6 +65,8 @@ import com.android.internal.R;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -84,8 +88,11 @@ public class BrightnessTrackerTest {
|
||||
private static final String DEFAULT_DISPLAY_ID = "123";
|
||||
private static final float FLOAT_DELTA = 0.01f;
|
||||
|
||||
@Mock private InputSensorInfo mInputSensorInfoMock;
|
||||
|
||||
private BrightnessTracker mTracker;
|
||||
private TestInjector mInjector;
|
||||
private Sensor mLightSensorFake;
|
||||
|
||||
private static Object sHandlerLock = new Object();
|
||||
private static Handler sHandler;
|
||||
@@ -108,9 +115,12 @@ public class BrightnessTrackerTest {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mInjector = new TestInjector(ensureHandler());
|
||||
mLightSensorFake = new Sensor(mInputSensorInfoMock);
|
||||
|
||||
mTracker = new BrightnessTracker(InstrumentationRegistry.getContext(), mInjector);
|
||||
mTracker.setLightSensor(mLightSensorFake);
|
||||
mDefaultNightModeColorTemperature =
|
||||
InstrumentationRegistry.getContext().getResources().getInteger(
|
||||
R.integer.config_nightDisplayColorTemperatureDefault);
|
||||
@@ -834,6 +844,47 @@ public class BrightnessTrackerTest {
|
||||
mTracker.stop();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLightSensorChange() {
|
||||
// verify the tracker started correctly and a listener registered
|
||||
startTracker(mTracker);
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
assertEquals(mInjector.mLightSensor, mLightSensorFake);
|
||||
|
||||
// Setting the sensor to null should stop the registered listener.
|
||||
mTracker.setLightSensor(null);
|
||||
mInjector.waitForHandler();
|
||||
assertNull(mInjector.mSensorListener);
|
||||
assertNull(mInjector.mLightSensor);
|
||||
|
||||
// Resetting sensor should start listener again
|
||||
mTracker.setLightSensor(mLightSensorFake);
|
||||
mInjector.waitForHandler();
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
assertEquals(mInjector.mLightSensor, mLightSensorFake);
|
||||
|
||||
Sensor secondSensor = new Sensor(mInputSensorInfoMock);
|
||||
// Setting a different listener should keep things working
|
||||
mTracker.setLightSensor(secondSensor);
|
||||
mInjector.waitForHandler();
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
assertEquals(mInjector.mLightSensor, secondSensor);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetLightSensorDoesntStartListener() {
|
||||
mTracker.setLightSensor(mLightSensorFake);
|
||||
assertNull(mInjector.mSensorListener);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullLightSensorWontRegister() {
|
||||
mTracker.setLightSensor(null);
|
||||
startTracker(mTracker);
|
||||
assertNull(mInjector.mSensorListener);
|
||||
assertNull(mInjector.mLightSensor);
|
||||
}
|
||||
|
||||
private InputStream getInputStream(String data) {
|
||||
return new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
@@ -924,6 +975,7 @@ public class BrightnessTrackerTest {
|
||||
|
||||
private class TestInjector extends BrightnessTracker.Injector {
|
||||
SensorEventListener mSensorListener;
|
||||
Sensor mLightSensor;
|
||||
BroadcastReceiver mBroadcastReceiver;
|
||||
DisplayManager.DisplayListener mDisplayListener;
|
||||
Map<String, Integer> mSecureIntSettings = new HashMap<>();
|
||||
@@ -974,14 +1026,16 @@ public class BrightnessTrackerTest {
|
||||
|
||||
@Override
|
||||
public void registerSensorListener(Context context,
|
||||
SensorEventListener sensorListener, Handler handler) {
|
||||
SensorEventListener sensorListener, Sensor lightSensor, Handler handler) {
|
||||
mSensorListener = sensorListener;
|
||||
mLightSensor = lightSensor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterSensorListener(Context context,
|
||||
SensorEventListener sensorListener) {
|
||||
mSensorListener = null;
|
||||
mLightSensor = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user