Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3afe7d3 authored by Long Ling's avatar Long Ling
Browse files

Use display listener instead of Intent Action for screen status

Bug: 138863442
Exempt-From-Owner-Approval: Santos is designated by Michael
Change-Id: Ia5fbac259e674fa1a33134a46ccdfe315cc4f552
parent 997adc05
Loading
Loading
Loading
Loading
+15 −24
Original line number Diff line number Diff line
@@ -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()));
            }
        }
    }
}