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

Unverified Commit 0b07a13e authored by Bruno Martins's avatar Bruno Martins Committed by Michael Bestas
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 9243440c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -128,5 +128,6 @@ interface IPowerManager
    const int GO_TO_SLEEP_FLAG_NO_DOZE = 1 << 0;

    // 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
@@ -491,7 +491,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{}
@@ -549,6 +550,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
     */
@@ -2392,6 +2399,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.
+9 −1
Original line number Diff line number Diff line
@@ -1133,14 +1133,22 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            if (buttonsLight != null) {
                buttonsLight.setBrightness(brightnessState);
            }
            LogicalLight keyboardLight = mLights.getLight(LightsManager.LIGHT_ID_KEYBOARD);
            if (keyboardLight != null) {
                keyboardLight.setBrightness(brightnessState);
            }
        }

        // Disable button lights when dozing
        // Disable button and keyboard lights when dozing
        if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) {
            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) {
                keyboardLight.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
@@ -2721,6 +2721,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

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

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

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

        final int lidState = mDefaultDisplayPolicy.getLidState();
        if (lidState == LID_CLOSED) {
            int lidBehavior = getLidBehavior();
+56 −1
Original line number Diff line number Diff line
@@ -311,9 +311,12 @@ 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 boolean mKeyboardVisible;
    private float mKeyboardBrightness;

    private boolean mButtonLightOnKeypressOnly;

@@ -575,8 +578,9 @@ public final class PowerManagerService extends SystemService
    public final float mScreenBrightnessMaximumVr;
    public final float mScreenBrightnessDefaultVr;

    // Button brightness
    // Button and keyboard brightness
    public final float mButtonBrightnessDefault;
    public final float mKeyboardBrightnessDefault;

    // Value we store for tracking face down behavior.
    private boolean mIsFaceDown = false;
@@ -1094,6 +1098,9 @@ public final class PowerManagerService extends SystemService
        mButtonBrightnessDefault = mContext.getResources().getFloat(
                org.lineageos.platform.internal.R.dimen
                        .config_buttonBrightnessSettingDefaultFloat);
        mKeyboardBrightnessDefault = mContext.getResources().getFloat(
                org.lineageos.platform.internal.R.dimen
                        .config_keyboardBrightnessSettingDefaultFloat);

        synchronized (mLock) {
            mWakeLockSuspendBlocker =
@@ -1211,6 +1218,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(
@@ -1302,6 +1310,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);

        IVrManager vrManager = IVrManager.Stub.asInterface(getBinderService(Context.VR_SERVICE));
        if (vrManager != null) {
@@ -1458,6 +1469,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, mKeyboardBrightnessDefault,
                UserHandle.USER_CURRENT);

        mDirty |= DIRTY_SETTINGS;
    }
@@ -2721,6 +2735,21 @@ public final class PowerManagerService extends SystemService
                                    }
                                }
                            }

                            if (mKeyboardLight != null) {
                                float keyboardBrightness = BRIGHTNESS_OFF_FLOAT;
                                if (isValidBrightness(mButtonBrightnessOverrideFromWindowManager)) {
                                    if (mButtonBrightnessOverrideFromWindowManager >
                                            PowerManager.BRIGHTNESS_MIN) {
                                        keyboardBrightness =
                                                mButtonBrightnessOverrideFromWindowManager;
                                    }
                                } else if (isValidKeyboardBrightness(mKeyboardBrightness)) {
                                    keyboardBrightness = mKeyboardBrightness;
                                }
                                mKeyboardLight.setBrightness(mKeyboardVisible ?
                                        keyboardBrightness : BRIGHTNESS_OFF_FLOAT);
                            }
                        }
                    } else {
                        groupNextTimeout = lastUserActivityTime + screenOffTimeout;
@@ -2731,6 +2760,9 @@ public final class PowerManagerService extends SystemService
                                    mButtonsLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                    mDisplayGroupPowerStateMapper.setButtonOnLocked(groupId, false);
                                }
                                if (mKeyboardLight != null) {
                                    mKeyboardLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                }
                            }
                        }
                    }
@@ -3457,6 +3489,10 @@ public final class PowerManagerService extends SystemService
        return value > PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
    }

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

    @VisibleForTesting
    int getDesiredScreenPolicyLocked(int groupId) {
        final int wakefulness = mDisplayGroupPowerStateMapper.getWakefulnessLocked(groupId);
@@ -4436,6 +4472,7 @@ public final class PowerManagerService extends SystemService
            pw.println("  mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
            pw.println("  mButtonTimeout=" + mButtonTimeout);
            pw.println("  mButtonBrightness=" + mButtonBrightness);
            pw.println("  mKeyboardBrightness=" + mKeyboardBrightness);
            pw.println("  mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
            pw.println("  mButtonBrightnessOverrideFromWindowManager="
                    + mButtonBrightnessOverrideFromWindowManager);
@@ -5592,6 +5629,8 @@ public final class PowerManagerService extends SystemService
                    return mScreenBrightnessDefaultVr;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON:
                    return mButtonBrightnessDefault;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD:
                    return mKeyboardBrightnessDefault;
                default:
                    return PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
@@ -6006,6 +6045,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(