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

Commit 5ae53f89 authored by LuK1337's avatar LuK1337 Committed by Łukasz Patron
Browse files

PowerManagerService: Add nullptr checks around button/keyboard lights

* Fixes NPE on devices using HWC display brightness control.

Change-Id: I1dc8f7b1e378a1fc8073f9da5d35bb0639a30b9d
parent 68d94597
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.server.display.whitebalance.DisplayWhiteBalanceController;
import com.android.server.display.whitebalance.DisplayWhiteBalanceFactory;
import com.android.server.display.whitebalance.DisplayWhiteBalanceSettings;
import com.android.server.lights.LightsManager;
import com.android.server.lights.LogicalLight;
import com.android.server.policy.WindowManagerPolicy;

import java.io.PrintWriter;
@@ -864,16 +865,26 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        if (state == Display.STATE_OFF) {
            brightnessState = PowerManager.BRIGHTNESS_OFF_FLOAT;
            mBrightnessReasonTemp.setReason(BrightnessReason.REASON_SCREEN_OFF);
            mLights.getLight(LightsManager.LIGHT_ID_BUTTONS).setBrightness(brightnessState);
            mLights.getLight(LightsManager.LIGHT_ID_KEYBOARD).setBrightness(brightnessState);
            LogicalLight buttonsLight = mLights.getLight(LightsManager.LIGHT_ID_BUTTONS);
            if (buttonsLight != null) {
                buttonsLight.setBrightness(brightnessState);
            }
            LogicalLight keyboardLight = mLights.getLight(LightsManager.LIGHT_ID_KEYBOARD);
            if (keyboardLight != null) {
                buttonsLight.setBrightness(brightnessState);
            }
        }

        // Disable button and keyboard lights when dozing
        if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) {
            mLights.getLight(LightsManager.LIGHT_ID_BUTTONS)
                    .setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
            mLights.getLight(LightsManager.LIGHT_ID_KEYBOARD)
                    .setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
            LogicalLight buttonsLight = mLights.getLight(LightsManager.LIGHT_ID_BUTTONS);
            if (buttonsLight != null) {
                buttonsLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
            }
            LogicalLight keyboardLight = mLights.getLight(LightsManager.LIGHT_ID_KEYBOARD);
            if (keyboardLight != null) {
                buttonsLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
            }
        }

        // Always use the VR brightness when in the VR state.
+53 −43
Original line number Diff line number Diff line
@@ -2421,6 +2421,7 @@ public final class PowerManagerService extends SystemService
                    if (now < nextTimeout) {
                        mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT;
                        if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) {
                            if (mButtonsLight != null) {
                                float buttonBrightness = PowerManager.BRIGHTNESS_OFF_FLOAT;
                                if (!mForceNavbar) {
                                    if (isValidBrightness(
@@ -2430,7 +2431,8 @@ public final class PowerManagerService extends SystemService
                                            buttonBrightness =
                                                    mButtonBrightnessOverrideFromWindowManager;
                                        }
                                } else if (isValidButtonOrKeyboardBrightness(mButtonBrightness)) {
                                    } else if (isValidButtonOrKeyboardBrightness(
                                            mButtonBrightness)) {
                                        buttonBrightness = mButtonBrightness;
                                    }
                                }
@@ -2454,11 +2456,14 @@ public final class PowerManagerService extends SystemService
                                            }
                                        }
                                    } else if (mButtonLightOnKeypressOnly && mButtonOn &&
                                        mLastButtonActivityTime + mButtonTimeout < nextTimeout) {
                                            mLastButtonActivityTime + mButtonTimeout <
                                                    nextTimeout) {
                                        nextTimeout = mLastButtonActivityTime + mButtonTimeout;
                                    }
                                }
                            }

                            if (mKeyboardLight != null) {
                                float keyboardBrightness = PowerManager.BRIGHTNESS_OFF_FLOAT;
                                if (isValidBrightness(mButtonBrightnessOverrideFromWindowManager)) {
                                    if (mButtonBrightnessOverrideFromWindowManager >
@@ -2472,19 +2477,24 @@ public final class PowerManagerService extends SystemService
                                mKeyboardLight.setBrightness(mKeyboardVisible ?
                                        keyboardBrightness : PowerManager.BRIGHTNESS_OFF_FLOAT);
                            }
                        }
                    } else {
                        nextTimeout = mLastUserActivityTime + screenOffTimeout;
                        if (now < nextTimeout) {
                            mUserActivitySummary = USER_ACTIVITY_SCREEN_DIM;
                            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) {
                                if (mButtonsLight != null) {
                                    mButtonsLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
                                    mButtonOn = false;
                                }

                                if (mKeyboardLight != null) {
                                    mKeyboardLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
                                }
                            }
                        }
                    }
                }
                if (mUserActivitySummary == 0
                        && mLastUserActivityTimeNoChangeLights >= mLastWakeTime) {
                    nextTimeout = mLastUserActivityTimeNoChangeLights + screenOffTimeout;