Merge "Update BrightnessTracker to use same sensor as ABC." into sc-v2-dev
This commit is contained in:
@@ -131,6 +131,7 @@ public class BrightnessTracker {
|
|||||||
private static final int MSG_STOP_SENSOR_LISTENER = 2;
|
private static final int MSG_STOP_SENSOR_LISTENER = 2;
|
||||||
private static final int MSG_START_SENSOR_LISTENER = 3;
|
private static final int MSG_START_SENSOR_LISTENER = 3;
|
||||||
private static final int MSG_BRIGHTNESS_CONFIG_CHANGED = 4;
|
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");
|
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.
|
// These members should only be accessed on the mBgHandler thread.
|
||||||
private BroadcastReceiver mBroadcastReceiver;
|
private BroadcastReceiver mBroadcastReceiver;
|
||||||
private SensorListener mSensorListener;
|
private SensorListener mSensorListener;
|
||||||
|
private Sensor mLightSensor;
|
||||||
private SettingsObserver mSettingsObserver;
|
private SettingsObserver mSettingsObserver;
|
||||||
private DisplayListener mDisplayListener;
|
private DisplayListener mDisplayListener;
|
||||||
private boolean mSensorRegistered;
|
private boolean mSensorRegistered;
|
||||||
@@ -327,6 +329,14 @@ public class BrightnessTracker {
|
|||||||
m.sendToTarget();
|
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,
|
private void handleBrightnessChanged(float brightness, boolean userInitiated,
|
||||||
float powerBrightnessFactor, boolean isUserSetBrightness,
|
float powerBrightnessFactor, boolean isUserSetBrightness,
|
||||||
boolean isDefaultBrightnessConfig, long timestamp, String uniqueDisplayId) {
|
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() {
|
private void startSensorListener() {
|
||||||
if (!mSensorRegistered
|
if (!mSensorRegistered
|
||||||
|
&& mLightSensor != null
|
||||||
|
&& mAmbientBrightnessStatsTracker != null
|
||||||
&& mInjector.isInteractive(mContext)
|
&& mInjector.isInteractive(mContext)
|
||||||
&& mInjector.isBrightnessModeAutomatic(mContentResolver)) {
|
&& mInjector.isBrightnessModeAutomatic(mContentResolver)) {
|
||||||
mAmbientBrightnessStatsTracker.start();
|
mAmbientBrightnessStatsTracker.start();
|
||||||
mSensorRegistered = true;
|
mSensorRegistered = true;
|
||||||
mInjector.registerSensorListener(mContext, mSensorListener,
|
mInjector.registerSensorListener(mContext, mSensorListener, mLightSensor,
|
||||||
mInjector.getBackgroundHandler());
|
mInjector.getBackgroundHandler());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -736,6 +761,7 @@ public class BrightnessTracker {
|
|||||||
pw.println("BrightnessTracker state:");
|
pw.println("BrightnessTracker state:");
|
||||||
synchronized (mDataCollectionLock) {
|
synchronized (mDataCollectionLock) {
|
||||||
pw.println(" mStarted=" + mStarted);
|
pw.println(" mStarted=" + mStarted);
|
||||||
|
pw.println(" mLightSensor=" + mLightSensor);
|
||||||
pw.println(" mLastBatteryLevel=" + mLastBatteryLevel);
|
pw.println(" mLastBatteryLevel=" + mLastBatteryLevel);
|
||||||
pw.println(" mLastBrightness=" + mLastBrightness);
|
pw.println(" mLastBrightness=" + mLastBrightness);
|
||||||
pw.println(" mLastSensorReadings.size=" + mLastSensorReadings.size());
|
pw.println(" mLastSensorReadings.size=" + mLastSensorReadings.size());
|
||||||
@@ -1017,6 +1043,9 @@ public class BrightnessTracker {
|
|||||||
disableColorSampling();
|
disableColorSampling();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MSG_SENSOR_CHANGED:
|
||||||
|
handleSensorChanged((Sensor) msg.obj);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1045,9 +1074,8 @@ public class BrightnessTracker {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static class Injector {
|
static class Injector {
|
||||||
public void registerSensorListener(Context context,
|
public void registerSensorListener(Context context,
|
||||||
SensorEventListener sensorListener, Handler handler) {
|
SensorEventListener sensorListener, Sensor lightSensor, Handler handler) {
|
||||||
SensorManager sensorManager = context.getSystemService(SensorManager.class);
|
SensorManager sensorManager = context.getSystemService(SensorManager.class);
|
||||||
Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
|
||||||
sensorManager.registerListener(sensorListener,
|
sensorManager.registerListener(sensorListener,
|
||||||
lightSensor, SensorManager.SENSOR_DELAY_NORMAL, handler);
|
lightSensor, SensorManager.SENSOR_DELAY_NORMAL, handler);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -795,7 +795,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
private void loadFromDisplayDeviceConfig(IBinder token, DisplayDeviceInfo info) {
|
private void loadFromDisplayDeviceConfig(IBinder token, DisplayDeviceInfo info) {
|
||||||
// All properties that depend on the associated DisplayDevice and the DDC must be
|
// All properties that depend on the associated DisplayDevice and the DDC must be
|
||||||
// updated here.
|
// updated here.
|
||||||
loadAmbientLightSensor();
|
|
||||||
loadBrightnessRampRates();
|
loadBrightnessRampRates();
|
||||||
loadProximitySensor();
|
loadProximitySensor();
|
||||||
loadNitsRange(mContext.getResources());
|
loadNitsRange(mContext.getResources());
|
||||||
@@ -925,6 +924,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadAmbientLightSensor();
|
loadAmbientLightSensor();
|
||||||
|
if (mBrightnessTracker != null) {
|
||||||
|
mBrightnessTracker.setLightSensor(mLightSensor);
|
||||||
|
}
|
||||||
|
|
||||||
if (mAutomaticBrightnessController != null) {
|
if (mAutomaticBrightnessController != null) {
|
||||||
mAutomaticBrightnessController.stop();
|
mAutomaticBrightnessController.stop();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import android.content.Intent;
|
|||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.pm.ParceledListSlice;
|
import android.content.pm.ParceledListSlice;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
|
import android.hardware.Sensor;
|
||||||
import android.hardware.SensorEvent;
|
import android.hardware.SensorEvent;
|
||||||
import android.hardware.SensorEventListener;
|
import android.hardware.SensorEventListener;
|
||||||
import android.hardware.display.AmbientBrightnessDayStats;
|
import android.hardware.display.AmbientBrightnessDayStats;
|
||||||
@@ -42,6 +43,7 @@ import android.hardware.display.ColorDisplayManager;
|
|||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
import android.hardware.display.DisplayedContentSample;
|
import android.hardware.display.DisplayedContentSample;
|
||||||
import android.hardware.display.DisplayedContentSamplingAttributes;
|
import android.hardware.display.DisplayedContentSamplingAttributes;
|
||||||
|
import android.hardware.input.InputSensorInfo;
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
@@ -63,6 +65,8 @@ import com.android.internal.R;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@@ -84,8 +88,11 @@ public class BrightnessTrackerTest {
|
|||||||
private static final String DEFAULT_DISPLAY_ID = "123";
|
private static final String DEFAULT_DISPLAY_ID = "123";
|
||||||
private static final float FLOAT_DELTA = 0.01f;
|
private static final float FLOAT_DELTA = 0.01f;
|
||||||
|
|
||||||
|
@Mock private InputSensorInfo mInputSensorInfoMock;
|
||||||
|
|
||||||
private BrightnessTracker mTracker;
|
private BrightnessTracker mTracker;
|
||||||
private TestInjector mInjector;
|
private TestInjector mInjector;
|
||||||
|
private Sensor mLightSensorFake;
|
||||||
|
|
||||||
private static Object sHandlerLock = new Object();
|
private static Object sHandlerLock = new Object();
|
||||||
private static Handler sHandler;
|
private static Handler sHandler;
|
||||||
@@ -108,9 +115,12 @@ public class BrightnessTrackerTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
|
MockitoAnnotations.initMocks(this);
|
||||||
mInjector = new TestInjector(ensureHandler());
|
mInjector = new TestInjector(ensureHandler());
|
||||||
|
mLightSensorFake = new Sensor(mInputSensorInfoMock);
|
||||||
|
|
||||||
mTracker = new BrightnessTracker(InstrumentationRegistry.getContext(), mInjector);
|
mTracker = new BrightnessTracker(InstrumentationRegistry.getContext(), mInjector);
|
||||||
|
mTracker.setLightSensor(mLightSensorFake);
|
||||||
mDefaultNightModeColorTemperature =
|
mDefaultNightModeColorTemperature =
|
||||||
InstrumentationRegistry.getContext().getResources().getInteger(
|
InstrumentationRegistry.getContext().getResources().getInteger(
|
||||||
R.integer.config_nightDisplayColorTemperatureDefault);
|
R.integer.config_nightDisplayColorTemperatureDefault);
|
||||||
@@ -834,6 +844,47 @@ public class BrightnessTrackerTest {
|
|||||||
mTracker.stop();
|
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) {
|
private InputStream getInputStream(String data) {
|
||||||
return new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
|
return new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
@@ -924,6 +975,7 @@ public class BrightnessTrackerTest {
|
|||||||
|
|
||||||
private class TestInjector extends BrightnessTracker.Injector {
|
private class TestInjector extends BrightnessTracker.Injector {
|
||||||
SensorEventListener mSensorListener;
|
SensorEventListener mSensorListener;
|
||||||
|
Sensor mLightSensor;
|
||||||
BroadcastReceiver mBroadcastReceiver;
|
BroadcastReceiver mBroadcastReceiver;
|
||||||
DisplayManager.DisplayListener mDisplayListener;
|
DisplayManager.DisplayListener mDisplayListener;
|
||||||
Map<String, Integer> mSecureIntSettings = new HashMap<>();
|
Map<String, Integer> mSecureIntSettings = new HashMap<>();
|
||||||
@@ -974,14 +1026,16 @@ public class BrightnessTrackerTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerSensorListener(Context context,
|
public void registerSensorListener(Context context,
|
||||||
SensorEventListener sensorListener, Handler handler) {
|
SensorEventListener sensorListener, Sensor lightSensor, Handler handler) {
|
||||||
mSensorListener = sensorListener;
|
mSensorListener = sensorListener;
|
||||||
|
mLightSensor = lightSensor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unregisterSensorListener(Context context,
|
public void unregisterSensorListener(Context context,
|
||||||
SensorEventListener sensorListener) {
|
SensorEventListener sensorListener) {
|
||||||
mSensorListener = null;
|
mSensorListener = null;
|
||||||
|
mLightSensor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user