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

Commit 41414973 authored by Bruno Martins's avatar Bruno Martins
Browse files

fwb: Re-introduce keyboard backlight brightness control

Picked remaining support from commit bbd00b78 and lid state
handling from commit 68771fe5.

Change-Id: I310dfd026b2dc5e7bc47dd4a2c1ae029d58a1e8e
parent 6c8a5ea3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -99,5 +99,6 @@ interface IPowerManager
    boolean forceSuspend();

    // Lineage custom API
    void setKeyboardVisibility(boolean visible);
    void wakeUpWithProximityCheck(long time, int reason, String details, String opPackageName);
}
+20 −1
Original line number Diff line number Diff line
@@ -466,7 +466,8 @@ public final class PowerManager {
            BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR,
            BRIGHTNESS_CONSTRAINT_TYPE_MAXIMUM_VR,
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_VR,
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON,
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface BrightnessConstraint{}
@@ -524,6 +525,12 @@ public final class PowerManager {
     */
    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON = 8;

    /**
     * Brightness constraint type: minimum allowed value.
     * @hide
     */
    public static final int BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD = 9;

    /**
     * @hide
     */
@@ -2074,6 +2081,18 @@ public final class PowerManager {
        }
    }

    /**
     * @hide
     */
    public void setKeyboardVisibility(boolean visible) {
        try {
            if (mService != null) {
                mService.setKeyboardVisibility(visible);
            }
        } catch (RemoteException e) {
        }
    }

    /**
     * If true, the doze component is not started until after the screen has been
     * turned off and the screen off animation has been performed.
+4 −1
Original line number Diff line number Diff line
@@ -865,12 +865,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            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);
        }

        // Disable button lights when dozing
        // 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);
        }

        // Always use the VR brightness when in the VR state.
+6 −0
Original line number Diff line number Diff line
@@ -2578,6 +2578,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private boolean isBuiltInKeyboardVisible() {
        return mHaveBuiltInKeyboard && !isHidden(mLidKeyboardAccessibility);
    }

    /** {@inheritDoc} */
    @Override
    public void adjustConfigurationLw(Configuration config, int keyboardPresence,
@@ -5672,6 +5676,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    private void applyLidSwitchState() {
        mPowerManager.setKeyboardVisibility(isBuiltInKeyboardVisible());

        final int lidState = mDefaultDisplayPolicy.getLidState();
        if (mLidControlsDisplayFold && mDisplayFoldController != null) {
            mDisplayFoldController.requestDeviceFolded(lidState == LID_CLOSED);
+55 −3
Original line number Diff line number Diff line
@@ -279,10 +279,14 @@ public final class PowerManagerService extends SystemService
    private DreamManagerInternal mDreamManager;
    private LogicalLight mAttentionLight;
    private LogicalLight mButtonsLight;
    private LogicalLight mKeyboardLight;

    private int mButtonTimeout;
    private float mButtonBrightness;
    private float mButtonBrightnessSettingDefault;
    private boolean mKeyboardVisible;
    private float mKeyboardBrightness;
    private float mKeyboardBrightnessSettingDefault;

    private InattentiveSleepWarningController mInattentiveSleepWarningOverlayController;
    private final AmbientDisplaySuppressionController mAmbientDisplaySuppressionController;
@@ -532,6 +536,7 @@ public final class PowerManagerService extends SystemService
    public final float mScreenBrightnessMaximumVr;
    public final float mScreenBrightnessDefaultVr;
    public final float mScreenBrightnessDefaultButton;
    public final float mScreenBrightnessDefaultKeyboard;

    // The screen brightness mode.
    // One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
@@ -1027,7 +1032,11 @@ public final class PowerManagerService extends SystemService
        }

        mScreenBrightnessDefaultButton = mContext.getResources().getFloat(
                org.lineageos.platform.internal.R.dimen.config_buttonBrightnessSettingDefaultFloat);
                org.lineageos.platform.internal.R.dimen
                        .config_buttonBrightnessSettingDefaultFloat);
        mScreenBrightnessDefaultKeyboard = mContext.getResources().getFloat(
                org.lineageos.platform.internal.R.dimen
                        .config_keyboardBrightnessSettingDefaultFloat);

        synchronized (mLock) {
            mWakeLockSuspendBlocker =
@@ -1101,6 +1110,8 @@ public final class PowerManagerService extends SystemService
            PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
            mButtonBrightnessSettingDefault = pm.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON);
            mKeyboardBrightnessSettingDefault = pm.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD);
            mScreenBrightnessSettingMinimum = pm.getBrightnessConstraint(
                    PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM);
            mScreenBrightnessSettingMaximum = pm.getBrightnessConstraint(
@@ -1126,6 +1137,7 @@ public final class PowerManagerService extends SystemService
            mLightsManager = getLocalService(LightsManager.class);
            mAttentionLight = mLightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION);
            mButtonsLight = mLightsManager.getLight(LightsManager.LIGHT_ID_BUTTONS);
            mKeyboardLight = mLightsManager.getLight(LightsManager.LIGHT_ID_KEYBOARD);

            // Initialize display power management.
            mDisplayManagerInternal.initPowerManagement(
@@ -1204,6 +1216,9 @@ public final class PowerManagerService extends SystemService
        resolver.registerContentObserver(LineageSettings.System.getUriFor(
                LineageSettings.System.BUTTON_BACKLIGHT_ONLY_WHEN_PRESSED),
                false, mSettingsObserver, UserHandle.USER_ALL);
        resolver.registerContentObserver(LineageSettings.Secure.getUriFor(
                LineageSettings.Secure.KEYBOARD_BRIGHTNESS),
                false, mSettingsObserver, UserHandle.USER_ALL);
        resolver.registerContentObserver(LineageSettings.System.getUriFor(
                LineageSettings.System.PROXIMITY_ON_WAKE),
                false, mSettingsObserver, UserHandle.USER_ALL);
@@ -1362,6 +1377,9 @@ public final class PowerManagerService extends SystemService
        mButtonLightOnKeypressOnly = LineageSettings.System.getIntForUser(resolver,
                LineageSettings.System.BUTTON_BACKLIGHT_ONLY_WHEN_PRESSED,
                0, UserHandle.USER_CURRENT) == 1;
        mKeyboardBrightness = LineageSettings.Secure.getFloatForUser(resolver,
                LineageSettings.Secure.KEYBOARD_BRIGHTNESS, mKeyboardBrightnessSettingDefault,
                UserHandle.USER_CURRENT);

        mProximityWakeEnabled = LineageSettings.System.getInt(resolver,
                LineageSettings.System.PROXIMITY_ON_WAKE,
@@ -2412,7 +2430,7 @@ public final class PowerManagerService extends SystemService
                                        buttonBrightness =
                                                mButtonBrightnessOverrideFromWindowManager;
                                    }
                                } else if (isValidButtonBrightness(mButtonBrightness)) {
                                } else if (isValidButtonOrKeyboardBrightness(mButtonBrightness)) {
                                    buttonBrightness = mButtonBrightness;
                                }
                            }
@@ -2440,6 +2458,19 @@ public final class PowerManagerService extends SystemService
                                    nextTimeout = mLastButtonActivityTime + mButtonTimeout;
                                }
                            }

                            float keyboardBrightness = PowerManager.BRIGHTNESS_OFF_FLOAT;
                            if (isValidBrightness(mButtonBrightnessOverrideFromWindowManager)) {
                                if (mButtonBrightnessOverrideFromWindowManager >
                                        PowerManager.BRIGHTNESS_MIN) {
                                    keyboardBrightness =
                                            mButtonBrightnessOverrideFromWindowManager;
                                }
                            } else if (isValidButtonOrKeyboardBrightness(mKeyboardBrightness)) {
                                 keyboardBrightness = mKeyboardBrightness;
                            }
                            mKeyboardLight.setBrightness(mKeyboardVisible ?
                                    keyboardBrightness : PowerManager.BRIGHTNESS_OFF_FLOAT);
                        }
                    } else {
                        nextTimeout = mLastUserActivityTime + screenOffTimeout;
@@ -2448,6 +2479,8 @@ public final class PowerManagerService extends SystemService
                            if (getWakefulnessLocked() == WAKEFULNESS_AWAKE) {
                                mButtonsLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
                                mButtonOn = false;

                                mKeyboardLight.setBrightness(PowerManager.BRIGHTNESS_OFF_FLOAT);
                            }
                        }
                    }
@@ -3083,7 +3116,7 @@ public final class PowerManagerService extends SystemService
        return value >= PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
    }

    private static boolean isValidButtonBrightness(float value) {
    private static boolean isValidButtonOrKeyboardBrightness(float value) {
        return value > PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
    }

@@ -4061,6 +4094,7 @@ public final class PowerManagerService extends SystemService
            pw.println("  mButtonTimeout=" + mButtonTimeout);
            pw.println("  mButtonBrightness=" + mButtonBrightness);
            pw.println("  mButtonBrightnessSettingDefault=" + mButtonBrightnessSettingDefault);
            pw.println("  mKeyboardBrightnessSettingDefault=" + mKeyboardBrightnessSettingDefault);
            pw.println("  mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
            pw.println("  mButtonBrightnessOverrideFromWindowManager="
                    + mButtonBrightnessOverrideFromWindowManager);
@@ -5160,6 +5194,8 @@ public final class PowerManagerService extends SystemService
                    return mScreenBrightnessDefaultVr;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON:
                    return mScreenBrightnessDefaultButton;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD:
                    return mScreenBrightnessDefaultKeyboard;
                default:
                    return PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
@@ -5452,6 +5488,22 @@ public final class PowerManagerService extends SystemService
            }
        }

        @Override // Binder call
        public void setKeyboardVisibility(boolean visible) {
            synchronized (mLock) {
                if (DEBUG_SPEW) {
                    Slog.d(TAG, "setKeyboardVisibility: " + visible);
                }
                if (mKeyboardVisible != visible) {
                    mKeyboardVisible = visible;
                    synchronized (mLock) {
                        mDirty |= DIRTY_USER_ACTIVITY;
                        updatePowerStateLocked();
                    }
                }
            }
        }

        @Override // Binder call
        public void setDozeAfterScreenOff(boolean on) {
            mContext.enforceCallingOrSelfPermission(