diff options
| -rw-r--r-- | services/core/java/com/android/server/display/DisplayModeDirector.java | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java index c45a314e39cc..764863616db1 100644 --- a/services/core/java/com/android/server/display/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/DisplayModeDirector.java @@ -680,6 +680,7 @@ public class DisplayModeDirector { @Override public void onDisplayChanged(int displayId) { updateDisplayModes(displayId); + mBrightnessObserver.onDisplayChanged(displayId); } private void updateDisplayModes(int displayId) { @@ -734,8 +735,6 @@ public class DisplayModeDirector { private AmbientFilter mAmbientFilter; private final Context mContext; - private ScreenStateReceiver mScreenStateReceiver; - // Enable light sensor only when screen is on, peak refresh rate enabled and low power mode // off. After initialization, these states will be updated from the same handler thread. private boolean mScreenOn = false; @@ -793,11 +792,7 @@ public class DisplayModeDirector { mSensorManager = sensorManager; mLightSensor = lightSensor; - // Intent.ACTION_SCREEN_ON is not sticky. Check current screen status. - if (mContext.getSystemService(PowerManager.class).isInteractive()) { - onScreenOn(true); - } - mScreenStateReceiver = new ScreenStateReceiver(mContext); + onScreenOn(isDefaultDisplayOn()); } } @@ -822,6 +817,12 @@ public class DisplayModeDirector { } } + public void onDisplayChanged(int displayId) { + if (displayId == Display.DEFAULT_DISPLAY) { + onScreenOn(isDefaultDisplayOn()); + } + } + public void dumpLocked(PrintWriter pw) { pw.println(" BrightnessObserver"); @@ -891,8 +892,6 @@ public class DisplayModeDirector { } private void onScreenOn(boolean on) { - // Not check mShouldObserveAmbientChange because Screen status receiver is registered - // only when it is true. if (mScreenOn != on) { mScreenOn = on; updateSensorStatus(); @@ -913,6 +912,13 @@ public class DisplayModeDirector { } } + private boolean isDefaultDisplayOn() { + final Display display = mContext.getSystemService(DisplayManager.class) + .getDisplay(Display.DEFAULT_DISPLAY); + return display.getState() != Display.STATE_OFF + && mContext.getSystemService(PowerManager.class).isInteractive(); + } + private final class LightSensorEventListener implements SensorEventListener { final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS; private float mLastSensorData; @@ -991,20 +997,5 @@ public class DisplayModeDirector { } }; }; - - private final class ScreenStateReceiver extends BroadcastReceiver { - public ScreenStateReceiver(Context context) { - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_SCREEN_OFF); - filter.addAction(Intent.ACTION_SCREEN_ON); - filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); - context.registerReceiver(this, filter, null, mHandler); - } - - @Override - public void onReceive(Context context, Intent intent) { - onScreenOn(Intent.ACTION_SCREEN_ON.equals(intent.getAction())); - } - } } } |