From f3afe7d37a04256e9a1a88feaa8c0b8babaa534e Mon Sep 17 00:00:00 2001 From: Long Ling Date: Mon, 5 Aug 2019 12:19:42 -0700 Subject: Use display listener instead of Intent Action for screen status Bug: 138863442 Exempt-From-Owner-Approval: Santos is designated by Michael Change-Id: Ia5fbac259e674fa1a33134a46ccdfe315cc4f552 --- .../server/display/DisplayModeDirector.java | 39 +++++++++------------- 1 file 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())); - } - } } } -- cgit v1.2.3-59-g8ed1b