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

Unverified Commit 90354b58 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 369c6918
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -171,5 +171,6 @@ interface IPowerManager

    // Lineage custom API
    void rebootCustom(boolean confirm, String reason, boolean wait);
    void setKeyboardVisibility(boolean visible);
    void wakeUpWithProximityCheck(long time, int reason, String details, String opPackageName);
}
+20 −1
Original line number Diff line number Diff line
@@ -556,7 +556,8 @@ public final class PowerManager {
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT,
            BRIGHTNESS_CONSTRAINT_TYPE_DIM,
            BRIGHTNESS_CONSTRAINT_TYPE_DOZE,
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON,
            BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface BrightnessConstraint{}
@@ -596,6 +597,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
     */
@@ -2850,6 +2857,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.
+5 −1
Original line number Diff line number Diff line
@@ -1303,13 +1303,17 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        final boolean userSetBrightnessChanged = mDisplayBrightnessController
                .updateUserSetScreenBrightness();

        // Disable button lights when screen off or dozing
        // Disable button and keyboard lights when screen off or dozing
        if (state == Display.STATE_OFF || 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);
            }
        }

        DisplayBrightnessState displayBrightnessState = mDisplayBrightnessController
+6 −0
Original line number Diff line number Diff line
@@ -3009,6 +3009,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

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

    /** {@inheritDoc} */
    @Override
    public void adjustConfigurationLw(Configuration config, int keyboardPresence,
@@ -5959,6 +5963,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
@@ -354,9 +354,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;

@@ -621,8 +624,9 @@ public final class PowerManagerService extends SystemService
    // (when {@link #mProximityPositive} is set to false).
    private boolean mInterceptedPowerKeyForProximity;

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

    // Screen brightness setting limits.
    public final float mScreenBrightnessMinimum;
@@ -1219,6 +1223,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);

        // Save brightness values:
        // Get float values from config.
@@ -1403,6 +1410,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);
            updateDeviceConfigLocked();
            mDeviceConfigProvider.addOnPropertiesChangedListener(BackgroundThread.getExecutor(),
                    properties -> {
@@ -1504,6 +1512,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);

        // Register for broadcasts from other components of the system.
        IntentFilter filter = new IntentFilter();
@@ -1648,6 +1659,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;
    }
@@ -3057,6 +3071,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;
@@ -3067,6 +3096,9 @@ public final class PowerManagerService extends SystemService
                                    mButtonsLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                    powerGroup.setButtonOnLocked(false);
                                }
                                if (mKeyboardLight != null) {
                                    mKeyboardLight.setBrightness(BRIGHTNESS_OFF_FLOAT);
                                }
                            }
                        }
                    }
@@ -3791,6 +3823,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
    @GuardedBy("mLock")
    int getDesiredScreenPolicyLocked(int groupId) {
@@ -4837,6 +4873,7 @@ public final class PowerManagerService extends SystemService
            pw.println("  mButtonBrightness=" + mButtonBrightness);
            pw.println("  mButtonBrightnessOverrideFromWindowManager="
                    + mButtonBrightnessOverrideFromWindowManager);
            pw.println("  mKeyboardBrightness=" + mKeyboardBrightness);
            pw.println("  mScreenBrightnessOverrideFromWindowManager="
                    + mScreenBrightnessOverrideFromWindowManager);
            pw.println("  mUserActivityTimeoutOverrideFromWindowManager="
@@ -6153,6 +6190,8 @@ public final class PowerManagerService extends SystemService
                    return mScreenBrightnessDoze;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_BUTTON:
                    return mButtonBrightnessDefault;
                case PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT_KEYBOARD:
                    return mKeyboardBrightnessDefault;
                default:
                    return PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
@@ -6838,6 +6877,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(