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

Commit 4be80650 authored by Chen Bai's avatar Chen Bai
Browse files

brightness: apply bedtime mode specific curve

Flag: com.android.server.display.feature.flags.auto_brightness_mode_bedtime_wear
Test: DisplayPowerControllerTest
Test: AutomaticBrightnessStrategyTest
Bug: 373781809
Change-Id: Id13700cc465b34bb56910e919b61cf6acdb5c72d
parent a453eab3
Loading
Loading
Loading
Loading
+34 −10
Original line number Diff line number Diff line
@@ -507,6 +507,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    // The time of inactivity after which the stylus can be assumed to be no longer in use.
    private long mIdleStylusTimeoutMillisConfig = 0;

    // Whether wear bedtime mode is enabled in the settings.
    private boolean mIsWearBedtimeModeEnabled;

    /**
     * Creates the display power controller.
     */
@@ -563,6 +566,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        mBrightnessTracker = brightnessTracker;
        mOnBrightnessChangeRunnable = onBrightnessChangeRunnable;

        mIsWearBedtimeModeEnabled = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.Wearable.BEDTIME_MODE, /* def= */ 0) == 1;
        mContext.getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.Wearable.BEDTIME_MODE),
                false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL);

        final Resources resources = context.getResources();

        // DOZE AND DIM SETTINGS
@@ -1166,8 +1175,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    screenBrightnessThresholds, ambientBrightnessThresholdsIdle,
                    screenBrightnessThresholdsIdle, mContext, mBrightnessRangeController,
                    mBrightnessThrottler, mDisplayDeviceConfig.getAmbientHorizonShort(),
                    mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits,
                    mBrightnessClamperController, mFlags);
                    mDisplayDeviceConfig.getAmbientHorizonLong(), userLux, userNits, mFlags);
            mDisplayBrightnessController.setUpAutoBrightness(
                    mAutomaticBrightnessController, mSensorManager, mDisplayDeviceConfig, mHandler,
                    defaultModeBrightnessMapper, mIsEnabled, mLeadDisplayId);
@@ -1386,9 +1394,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        final boolean useDozeBrightness = mFlags.isNormalBrightnessForDozeParameterEnabled()
                ? (!mPowerRequest.useNormalBrightnessForDoze && mPowerRequest.policy == POLICY_DOZE)
                        || Display.isDozeState(state) : Display.isDozeState(state);

        DisplayBrightnessState displayBrightnessState = mDisplayBrightnessController
                .updateBrightness(mPowerRequest, state, mDisplayOffloadSession);
        DisplayBrightnessState displayBrightnessState =
                mDisplayBrightnessController.updateBrightness(
                        mPowerRequest,
                        state,
                        mDisplayOffloadSession,
                        mIsWearBedtimeModeEnabled);
        float brightnessState = displayBrightnessState.getBrightness();
        float rawBrightnessState = displayBrightnessState.getBrightness();
        mBrightnessReasonTemp.set(displayBrightnessState.getBrightnessReason());
@@ -1429,16 +1440,24 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    && !mAutomaticBrightnessController.isInIdleMode()) {
                // Set sendUpdate to false, we're already in updatePowerState() so there's no need
                // to trigger it again
                mAutomaticBrightnessController.switchMode(useDozeBrightness
                        ? AUTO_BRIGHTNESS_MODE_DOZE : AUTO_BRIGHTNESS_MODE_DEFAULT,
                if (useDozeBrightness) {
                    mAutomaticBrightnessController.switchMode(AUTO_BRIGHTNESS_MODE_DOZE,
                            /* sendUpdate= */ false);
                } else if (mFlags.isAutoBrightnessModeBedtimeWearEnabled()
                        && mIsWearBedtimeModeEnabled) {
                    mAutomaticBrightnessController.switchMode(AUTO_BRIGHTNESS_MODE_BEDTIME_WEAR,
                            /* sendUpdate= */ false);
                } else {
                    mAutomaticBrightnessController.switchMode(AUTO_BRIGHTNESS_MODE_DEFAULT,
                            /* sendUpdate= */ false);
                }
            }

            mAutomaticBrightnessStrategy.setAutoBrightnessState(state,
                    allowAutoBrightnessWhileDozing, mBrightnessReasonTemp.getReason(),
                    mPowerRequest.policy, mPowerRequest.useNormalBrightnessForDoze,
                    mDisplayBrightnessController.getLastUserSetScreenBrightness(),
                    userSetBrightnessChanged);
                    userSetBrightnessChanged, mIsWearBedtimeModeEnabled);

            // If the brightness is already set then it's been overridden by something other than
            // the user, or is a temporary adjustment.
@@ -3172,6 +3191,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                        + autoBrightnessPresetToString(preset));
                setUpAutoBrightness(mContext, mHandler);
                sendUpdatePowerState();
            } else if (uri.equals(
                    Settings.Global.getUriFor(Settings.Global.Wearable.BEDTIME_MODE))) {
                mIsWearBedtimeModeEnabled = Settings.Global.getInt(mContext.getContentResolver(),
                        Settings.Global.Wearable.BEDTIME_MODE, /* def= */ 0) == 1;
                Slog.i(mTag, "Update for bedtime mode. Enable: " + mIsWearBedtimeModeEnabled);
                sendUpdatePowerState();
            } else {
                handleSettingsChange();
            }
@@ -3275,7 +3300,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                BrightnessRangeController brightnessModeController,
                BrightnessThrottler brightnessThrottler, int ambientLightHorizonShort,
                int ambientLightHorizonLong, float userLux, float userNits,
                BrightnessClamperController brightnessClamperController,
                DisplayManagerFlags displayManagerFlags) {

            return new AutomaticBrightnessController(callbacks, looper, sensorManager, lightSensor,
+6 −4
Original line number Diff line number Diff line
@@ -150,12 +150,13 @@ public final class DisplayBrightnessController {
    public DisplayBrightnessState updateBrightness(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
            int targetDisplayState,
            DisplayManagerInternal.DisplayOffloadSession displayOffloadSession) {
            DisplayManagerInternal.DisplayOffloadSession displayOffloadSession,
            boolean isBedtimeModeWearEnabled) {
        DisplayBrightnessState state;
        synchronized (mLock) {
            mDisplayBrightnessStrategy = mDisplayBrightnessStrategySelector.selectStrategy(
                    constructStrategySelectionRequest(displayPowerRequest, targetDisplayState,
                            displayOffloadSession));
                            displayOffloadSession, isBedtimeModeWearEnabled));
            state = mDisplayBrightnessStrategy
                        .updateBrightness(constructStrategyExecutionRequest(displayPowerRequest));
        }
@@ -629,7 +630,8 @@ public final class DisplayBrightnessController {
    private StrategySelectionRequest constructStrategySelectionRequest(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
            int targetDisplayState,
            DisplayManagerInternal.DisplayOffloadSession displayOffloadSession) {
            DisplayManagerInternal.DisplayOffloadSession displayOffloadSession,
            boolean isBedtimeModeEnabled) {
        boolean userSetBrightnessChanged = updateUserSetScreenBrightness();
        float lastUserSetScreenBrightness;
        synchronized (mLock) {
@@ -637,7 +639,7 @@ public final class DisplayBrightnessController {
        }
        return new StrategySelectionRequest(displayPowerRequest, targetDisplayState,
                lastUserSetScreenBrightness, userSetBrightnessChanged, displayOffloadSession,
                mIsStylusBeingUsed);
                mIsStylusBeingUsed, isBedtimeModeEnabled);
    }

    private StrategyExecutionRequest constructStrategyExecutionRequest(
+4 −2
Original line number Diff line number Diff line
@@ -305,7 +305,8 @@ public class DisplayBrightnessStrategySelector {
                strategySelectionRequest.getDisplayPowerRequest().policy,
                strategySelectionRequest.getDisplayPowerRequest().useNormalBrightnessForDoze,
                strategySelectionRequest.getLastUserSetScreenBrightness(),
                strategySelectionRequest.isUserSetBrightnessChanged());
                strategySelectionRequest.isUserSetBrightnessChanged(),
                strategySelectionRequest.isWearBedtimeModeEnabled());
        return !strategySelectionRequest.isStylusBeingUsed()
                && mAutomaticBrightnessStrategy1.isAutoBrightnessValid();
    }
@@ -320,7 +321,8 @@ public class DisplayBrightnessStrategySelector {
                strategySelectionRequest.getLastUserSetScreenBrightness(),
                strategySelectionRequest.isUserSetBrightnessChanged(),
                mAllowAutoBrightnessWhileDozing,
                getAutomaticBrightnessStrategy().shouldUseAutoBrightness());
                getAutomaticBrightnessStrategy().shouldUseAutoBrightness(),
                strategySelectionRequest.isWearBedtimeModeEnabled());
    }

    private void postProcess(StrategySelectionNotifyRequest strategySelectionNotifyRequest) {
+12 −3
Original line number Diff line number Diff line
@@ -47,13 +47,15 @@ public final class StrategySelectionNotifyRequest {
    private final boolean mAllowAutoBrightnessWhileDozingConfig;
    // True if the auto brightness is enabled in the settings
    private final boolean mIsAutoBrightnessEnabled;
    // True if wear bedtime mode is enabled in the settings.
    private final boolean mIsBedtimeModeWearEnabled;

    public StrategySelectionNotifyRequest(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest, int targetDisplayState,
            DisplayBrightnessStrategy displayBrightnessStrategy,
            float lastUserSetScreenBrightness,
            boolean userSetBrightnessChanged, boolean allowAutoBrightnessWhileDozingConfig,
            boolean isAutoBrightnessEnabled) {
            boolean isAutoBrightnessEnabled, boolean isBedtimeModeWearEnabled) {
        mDisplayPowerRequest = displayPowerRequest;
        mTargetDisplayState = targetDisplayState;
        mSelectedDisplayBrightnessStrategy = displayBrightnessStrategy;
@@ -61,6 +63,7 @@ public final class StrategySelectionNotifyRequest {
        mUserSetBrightnessChanged = userSetBrightnessChanged;
        mAllowAutoBrightnessWhileDozingConfig = allowAutoBrightnessWhileDozingConfig;
        mIsAutoBrightnessEnabled = isAutoBrightnessEnabled;
        mIsBedtimeModeWearEnabled = isBedtimeModeWearEnabled;
    }

    public DisplayBrightnessStrategy getSelectedDisplayBrightnessStrategy() {
@@ -81,7 +84,8 @@ public final class StrategySelectionNotifyRequest {
                && mLastUserSetScreenBrightness == other.getLastUserSetScreenBrightness()
                && mAllowAutoBrightnessWhileDozingConfig
                == other.isAllowAutoBrightnessWhileDozingConfig()
                && mIsAutoBrightnessEnabled == other.isAutoBrightnessEnabled();
                && mIsAutoBrightnessEnabled == other.isAutoBrightnessEnabled()
                && mIsBedtimeModeWearEnabled == other.isBedtimeModeWearEnabled();
    }

    @Override
@@ -99,6 +103,10 @@ public final class StrategySelectionNotifyRequest {
        return mUserSetBrightnessChanged;
    }

    public boolean isBedtimeModeWearEnabled() {
        return mIsBedtimeModeWearEnabled;
    }

    public DisplayManagerInternal.DisplayPowerRequest getDisplayPowerRequest() {
        return mDisplayPowerRequest;
    }
@@ -126,6 +134,7 @@ public final class StrategySelectionNotifyRequest {
                + " mLastUserSetScreenBrightness=" + mLastUserSetScreenBrightness
                + " mUserSetBrightnessChanged=" + mUserSetBrightnessChanged
                + " mAllowAutoBrightnessWhileDozingConfig=" + mAllowAutoBrightnessWhileDozingConfig
                + " mIsAutoBrightnessEnabled=" + mIsAutoBrightnessEnabled;
                + " mIsAutoBrightnessEnabled=" + mIsAutoBrightnessEnabled
                + " mIsBedtimeModeWearEnabled" + mIsBedtimeModeWearEnabled;
    }
}
+11 −2
Original line number Diff line number Diff line
@@ -42,17 +42,21 @@ public final class StrategySelectionRequest {

    private boolean mIsStylusBeingUsed;

    private boolean mIsWearBedtimeModeEnabled;

    public StrategySelectionRequest(DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
            int targetDisplayState, float lastUserSetScreenBrightness,
            boolean userSetBrightnessChanged,
            DisplayManagerInternal.DisplayOffloadSession displayOffloadSession,
            boolean isStylusBeingUsed) {
            boolean isStylusBeingUsed,
            boolean isWearBedtimeModeEnabled) {
        mDisplayPowerRequest = displayPowerRequest;
        mTargetDisplayState = targetDisplayState;
        mLastUserSetScreenBrightness = lastUserSetScreenBrightness;
        mUserSetBrightnessChanged = userSetBrightnessChanged;
        mDisplayOffloadSession = displayOffloadSession;
        mIsStylusBeingUsed = isStylusBeingUsed;
        mIsWearBedtimeModeEnabled = isWearBedtimeModeEnabled;
    }

    public DisplayManagerInternal.DisplayPowerRequest getDisplayPowerRequest() {
@@ -72,6 +76,10 @@ public final class StrategySelectionRequest {
        return mUserSetBrightnessChanged;
    }

    public boolean isWearBedtimeModeEnabled() {
        return mIsWearBedtimeModeEnabled;
    }

    public DisplayManagerInternal.DisplayOffloadSession getDisplayOffloadSession() {
        return mDisplayOffloadSession;
    }
@@ -91,7 +99,8 @@ public final class StrategySelectionRequest {
                && mLastUserSetScreenBrightness == other.getLastUserSetScreenBrightness()
                && mUserSetBrightnessChanged == other.isUserSetBrightnessChanged()
                && mDisplayOffloadSession.equals(other.getDisplayOffloadSession())
                && mIsStylusBeingUsed == other.isStylusBeingUsed();
                && mIsStylusBeingUsed == other.isStylusBeingUsed()
                && mIsWearBedtimeModeEnabled == other.isWearBedtimeModeEnabled();
    }

    @Override
Loading