Don't keep sensor listener while screen is off.
Register / unregister on screen off / on intents. Bug: 69564178 Test: runtest -c com.android.server.display.BrightnessTrackerTest frameworks-service Test: manual, turn on/off screen and check adb shell dumpsys sensorservice Change-Id: I7bfb6b35108887baf40d9134d16d13a9f5aa839f
This commit is contained in:
@@ -34,6 +34,7 @@ import android.net.Uri;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
@@ -162,7 +163,10 @@ public class BrightnessTracker {
|
||||
UserHandle.USER_CURRENT);
|
||||
|
||||
mSensorListener = new SensorListener();
|
||||
mInjector.registerSensorListener(mContext, mSensorListener);
|
||||
|
||||
if (mInjector.isInteractive(mContext)) {
|
||||
mInjector.registerSensorListener(mContext, mSensorListener, mBgHandler);
|
||||
}
|
||||
|
||||
mSettingsObserver = new SettingsObserver(mBgHandler);
|
||||
mInjector.registerBrightnessObserver(mContentResolver, mSettingsObserver);
|
||||
@@ -170,6 +174,8 @@ public class BrightnessTracker {
|
||||
final IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(Intent.ACTION_SHUTDOWN);
|
||||
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
||||
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
mBroadcastReceiver = new Receiver();
|
||||
mInjector.registerReceiver(mContext, mBroadcastReceiver, intentFilter);
|
||||
|
||||
@@ -584,6 +590,11 @@ public class BrightnessTracker {
|
||||
if (level != -1 && scale != 0) {
|
||||
batteryLevelChanged(level, scale);
|
||||
}
|
||||
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
|
||||
mInjector.unregisterSensorListener(mContext, mSensorListener);
|
||||
} else if (Intent.ACTION_SCREEN_ON.equals(action)) {
|
||||
mInjector.registerSensorListener(mContext, mSensorListener,
|
||||
mInjector.getBackgroundHandler());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -591,11 +602,11 @@ public class BrightnessTracker {
|
||||
@VisibleForTesting
|
||||
static class Injector {
|
||||
public void registerSensorListener(Context context,
|
||||
SensorEventListener sensorListener) {
|
||||
SensorEventListener sensorListener, Handler handler) {
|
||||
SensorManager sensorManager = context.getSystemService(SensorManager.class);
|
||||
Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
||||
sensorManager.registerListener(sensorListener,
|
||||
lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
|
||||
lightSensor, SensorManager.SENSOR_DELAY_NORMAL, handler);
|
||||
}
|
||||
|
||||
public void unregisterSensorListener(Context context, SensorEventListener sensorListener) {
|
||||
@@ -675,5 +686,9 @@ public class BrightnessTracker {
|
||||
public void cancelIdleJob(Context context) {
|
||||
BrightnessIdleJob.cancelJob(context);
|
||||
}
|
||||
|
||||
public boolean isInteractive(Context context) {
|
||||
return context.getSystemService(PowerManager.class).isInteractive();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,29 @@ public class BrightnessTrackerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStartStopTracker() {
|
||||
public void testStartStopTrackerScreenOnOff() {
|
||||
mInjector.mInteractive = false;
|
||||
startTracker(mTracker);
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
assertNull(mInjector.mSensorListener);
|
||||
assertNotNull(mInjector.mSettingsObserver);
|
||||
assertNotNull(mInjector.mBroadcastReceiver);
|
||||
assertTrue(mInjector.mIdleScheduled);
|
||||
Intent onIntent = new Intent();
|
||||
onIntent.setAction(Intent.ACTION_SCREEN_ON);
|
||||
mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
|
||||
onIntent);
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
|
||||
Intent offIntent = new Intent();
|
||||
offIntent.setAction(Intent.ACTION_SCREEN_OFF);
|
||||
mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
|
||||
offIntent);
|
||||
assertNull(mInjector.mSensorListener);
|
||||
|
||||
mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
|
||||
onIntent);
|
||||
assertNotNull(mInjector.mSensorListener);
|
||||
|
||||
mTracker.stop();
|
||||
assertNull(mInjector.mSensorListener);
|
||||
assertNull(mInjector.mSettingsObserver);
|
||||
@@ -532,7 +549,6 @@ public class BrightnessTrackerTest {
|
||||
mInjector.waitForHandler();
|
||||
}
|
||||
|
||||
|
||||
private static final class Idle implements MessageQueue.IdleHandler {
|
||||
private boolean mIdle;
|
||||
|
||||
@@ -565,6 +581,7 @@ public class BrightnessTrackerTest {
|
||||
long mElapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos();
|
||||
Handler mHandler;
|
||||
boolean mIdleScheduled;
|
||||
boolean mInteractive = true;
|
||||
|
||||
public TestInjector(Handler handler) {
|
||||
mHandler = handler;
|
||||
@@ -577,7 +594,7 @@ public class BrightnessTrackerTest {
|
||||
|
||||
@Override
|
||||
public void registerSensorListener(Context context,
|
||||
SensorEventListener sensorListener) {
|
||||
SensorEventListener sensorListener, Handler handler) {
|
||||
mSensorListener = sensorListener;
|
||||
}
|
||||
|
||||
@@ -694,5 +711,9 @@ public class BrightnessTrackerTest {
|
||||
public void cancelIdleJob(Context context) {
|
||||
mIdleScheduled = false;
|
||||
}
|
||||
|
||||
public boolean isInteractive(Context context) {
|
||||
return mInteractive;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user