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

Commit 4b93ef02 authored by Santos Cordon's avatar Santos Cordon Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 7f536143 to main" into main

parents a36c14c5 f545b2c2
Loading
Loading
Loading
Loading
+58 −21
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.display;

import android.text.TextUtils;

import com.android.server.display.brightness.BrightnessReason;

import java.util.Objects;
@@ -29,12 +31,14 @@ public final class DisplayBrightnessState {
    private final float mSdrBrightness;
    private final BrightnessReason mBrightnessReason;
    private final String mDisplayBrightnessStrategyName;
    private final boolean mShouldUseAutoBrightness;

    private DisplayBrightnessState(Builder builder) {
        this.mBrightness = builder.getBrightness();
        this.mSdrBrightness = builder.getSdrBrightness();
        this.mBrightnessReason = builder.getBrightnessReason();
        this.mDisplayBrightnessStrategyName = builder.getDisplayBrightnessStrategyName();
        mBrightness = builder.getBrightness();
        mSdrBrightness = builder.getSdrBrightness();
        mBrightnessReason = builder.getBrightnessReason();
        mDisplayBrightnessStrategyName = builder.getDisplayBrightnessStrategyName();
        mShouldUseAutoBrightness = builder.getShouldUseAutoBrightness();
    }

    /**
@@ -66,6 +70,13 @@ public final class DisplayBrightnessState {
        return mDisplayBrightnessStrategyName;
    }

    /**
     * @return {@code true} if the device is set up to run auto-brightness.
     */
    public boolean getShouldUseAutoBrightness() {
        return mShouldUseAutoBrightness;
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:");
@@ -75,6 +86,8 @@ public final class DisplayBrightnessState {
        stringBuilder.append(getSdrBrightness());
        stringBuilder.append("\n    brightnessReason:");
        stringBuilder.append(getBrightnessReason());
        stringBuilder.append("\n    shouldUseAutoBrightness:");
        stringBuilder.append(getShouldUseAutoBrightness());
        return stringBuilder.toString();
    }

@@ -91,28 +104,20 @@ public final class DisplayBrightnessState {
            return false;
        }

        DisplayBrightnessState
                displayBrightnessState = (DisplayBrightnessState) other;
        DisplayBrightnessState otherState = (DisplayBrightnessState) other;

        if (mBrightness != displayBrightnessState.getBrightness()) {
            return false;
        }
        if (mSdrBrightness != displayBrightnessState.getSdrBrightness()) {
            return false;
        }
        if (!mBrightnessReason.equals(displayBrightnessState.getBrightnessReason())) {
            return false;
        }
        if (!mDisplayBrightnessStrategyName.equals(
                displayBrightnessState.getDisplayBrightnessStrategyName())) {
            return false;
        }
        return true;
        return mBrightness == otherState.getBrightness()
                && mSdrBrightness == otherState.getSdrBrightness()
                && mBrightnessReason.equals(otherState.getBrightnessReason())
                && TextUtils.equals(mDisplayBrightnessStrategyName,
                        otherState.getDisplayBrightnessStrategyName())
                && mShouldUseAutoBrightness == otherState.getShouldUseAutoBrightness();
    }

    @Override
    public int hashCode() {
        return Objects.hash(mBrightness, mSdrBrightness, mBrightnessReason);
        return Objects.hash(
                mBrightness, mSdrBrightness, mBrightnessReason, mShouldUseAutoBrightness);
    }

    /**
@@ -123,6 +128,23 @@ public final class DisplayBrightnessState {
        private float mSdrBrightness;
        private BrightnessReason mBrightnessReason = new BrightnessReason();
        private String mDisplayBrightnessStrategyName;
        private boolean mShouldUseAutoBrightness;

        /**
         * Create a builder starting with the values from the specified {@link
         * DisplayBrightnessState}.
         *
         * @param state The state from which to initialize.
         */
        public static Builder from(DisplayBrightnessState state) {
            Builder builder = new Builder();
            builder.setBrightness(state.getBrightness());
            builder.setSdrBrightness(state.getSdrBrightness());
            builder.setBrightnessReason(state.getBrightnessReason());
            builder.setDisplayBrightnessStrategyName(state.getDisplayBrightnessStrategyName());
            builder.setShouldUseAutoBrightness(state.getShouldUseAutoBrightness());
            return builder;
        }

        /**
         * Gets the brightness
@@ -199,6 +221,21 @@ public final class DisplayBrightnessState {
            return this;
        }

        /**
         * See {@link DisplayBrightnessState#getShouldUseAutoBrightness}.
         */
        public Builder setShouldUseAutoBrightness(boolean shouldUseAutoBrightness) {
            this.mShouldUseAutoBrightness = shouldUseAutoBrightness;
            return this;
        }

        /**
         * See {@link DisplayBrightnessState#getShouldUseAutoBrightness}.
         */
        public boolean getShouldUseAutoBrightness() {
            return mShouldUseAutoBrightness;
        }

        /**
         * This is used to construct an immutable DisplayBrightnessState object from its builder
         */
+23 −15
Original line number Diff line number Diff line
@@ -501,7 +501,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                mWakelockController, mDisplayDeviceConfig, mHandler.getLooper(),
                () -> updatePowerState(), mDisplayId, mSensorManager);
        mDisplayStateController = new DisplayStateController(mDisplayPowerProximityStateController);
        mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy(context, mDisplayId);
        mTag = "DisplayPowerController2[" + mDisplayId + "]";
        mThermalBrightnessThrottlingDataId =
                logicalDisplay.getDisplayInfoLocked().thermalBrightnessThrottlingDataId;
@@ -572,6 +571,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        ));
        // Seed the cached brightness
        saveBrightnessInfo(getScreenBrightnessSetting());
        mAutomaticBrightnessStrategy =
                mDisplayBrightnessController.getAutomaticBrightnessStrategy();

        DisplayWhiteBalanceSettings displayWhiteBalanceSettings = null;
        DisplayWhiteBalanceController displayWhiteBalanceController = null;
@@ -615,7 +616,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

        setUpAutoBrightness(resources, handler);

        mColorFadeEnabled = !ActivityManager.isLowRamDeviceStatic();
        mColorFadeEnabled = mInjector.isColorFadeEnabled();
        mColorFadeFadesConfig = resources.getBoolean(
                R.bool.config_animateScreenLights);

@@ -1280,14 +1281,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        int state = mDisplayStateController
                .updateDisplayState(mPowerRequest, mIsEnabled, mIsInTransition);

        if (mScreenOffBrightnessSensorController != null) {
            mScreenOffBrightnessSensorController
                    .setLightSensorEnabled(mAutomaticBrightnessStrategy.shouldUseAutoBrightness()
                    && mIsEnabled && (state == Display.STATE_OFF || (state == Display.STATE_DOZE
                    && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig()))
                    && mLeadDisplayId == Layout.NO_LEAD_DISPLAY);
        }

        // Initialize things the first time the power state is changed.
        if (mustInitialize) {
            initialize(readyToUpdateDisplayState() ? state : Display.STATE_UNKNOWN);
@@ -1313,6 +1306,17 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            slowChange = mBrightnessToFollowSlowChange;
        }

        // Set up the ScreenOff controller used when coming out of SCREEN_OFF and the ALS sensor
        // doesn't yet have a valid lux value to use with auto-brightness.
        if (mScreenOffBrightnessSensorController != null) {
            mScreenOffBrightnessSensorController
                    .setLightSensorEnabled(displayBrightnessState.getShouldUseAutoBrightness()
                    && mIsEnabled && (state == Display.STATE_OFF
                    || (state == Display.STATE_DOZE
                    && !mDisplayBrightnessController.isAllowAutoBrightnessWhileDozingConfig()))
                    && mLeadDisplayId == Layout.NO_LEAD_DISPLAY);
        }

        // Take note if the short term model was already active before applying the current
        // request changes.
        final boolean wasShortTermModelActive =
@@ -1588,7 +1592,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

            notifyBrightnessTrackerChanged(brightnessState, userInitiatedChange,
                    wasShortTermModelActive, mAutomaticBrightnessStrategy.isAutoBrightnessEnabled(),
                    brightnessIsTemporary);
                    brightnessIsTemporary, displayBrightnessState.getShouldUseAutoBrightness());

            // We save the brightness info *after* the brightness setting has been changed and
            // adjustments made so that the brightness info reflects the latest value.
@@ -1632,8 +1636,8 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        mTempBrightnessEvent.setWasShortTermModelActive(wasShortTermModelActive);
        mTempBrightnessEvent.setDisplayBrightnessStrategyName(displayBrightnessState
                .getDisplayBrightnessStrategyName());
        mTempBrightnessEvent.setAutomaticBrightnessEnabled(mAutomaticBrightnessStrategy
                .shouldUseAutoBrightness());
        mTempBrightnessEvent.setAutomaticBrightnessEnabled(
                displayBrightnessState.getShouldUseAutoBrightness());
        // Temporary is what we use during slider interactions. We avoid logging those so that
        // we don't spam logcat when the slider is being used.
        boolean tempToTempTransition =
@@ -2271,7 +2275,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

    private void notifyBrightnessTrackerChanged(float brightness, boolean userInitiated,
            boolean wasShortTermModelActive, boolean autobrightnessEnabled,
            boolean brightnessIsTemporary) {
            boolean brightnessIsTemporary, boolean shouldUseAutoBrightness) {

        final float brightnessInNits =
                mDisplayBrightnessController.convertToAdjustedNits(brightness);
@@ -2286,7 +2290,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                || mAutomaticBrightnessController.isInIdleMode()
                || !autobrightnessEnabled
                || mBrightnessTracker == null
                || !mAutomaticBrightnessStrategy.shouldUseAutoBrightness()
                || !shouldUseAutoBrightness
                || brightnessInNits < 0.0f) {
            return;
        }
@@ -2989,6 +2993,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            return DisplayWhiteBalanceFactory.create(handler,
                    sensorManager, resources);
        }

        boolean isColorFadeEnabled() {
            return !ActivityManager.isLowRamDeviceStatic();
        }
    }

    static class CachedBrightnessInfo {
+31 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.AutomaticBrightnessController;
import com.android.server.display.BrightnessSetting;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy;
import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy;

import java.io.PrintWriter;
@@ -134,11 +135,21 @@ public final class DisplayBrightnessController {
    public DisplayBrightnessState updateBrightness(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
            int targetDisplayState) {

        DisplayBrightnessState state;
        synchronized (mLock) {
            mDisplayBrightnessStrategy = mDisplayBrightnessStrategySelector.selectStrategy(
                    displayPowerRequest, targetDisplayState);
            return mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest);
            state = mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest);
        }

        // This is a temporary measure until AutomaticBrightnessStrategy works as a traditional
        // strategy.
        // TODO: Remove when AutomaticBrightnessStrategy is populating the values directly.
        if (state != null) {
            state = addAutomaticBrightnessState(state);
        }
        return state;
    }

    /**
@@ -321,6 +332,13 @@ public final class DisplayBrightnessController {
        loadNitBasedBrightnessSetting();
    }

    /**
     * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy.
     */
    public AutomaticBrightnessStrategy getAutomaticBrightnessStrategy() {
        return mDisplayBrightnessStrategySelector.getAutomaticBrightnessStrategy();
    }

    /**
     * Convert a brightness float scale value to a nit value. Adjustments, such as RBC, are not
     * applied. This is used when storing the brightness in nits for the default display and when
@@ -425,6 +443,18 @@ public final class DisplayBrightnessController {
        }
    }

    /**
     * TODO(b/253226419): Remove once auto-brightness is a fully-functioning strategy.
     */
    private DisplayBrightnessState addAutomaticBrightnessState(DisplayBrightnessState state) {
        AutomaticBrightnessStrategy autoStrat = getAutomaticBrightnessStrategy();

        DisplayBrightnessState.Builder builder = DisplayBrightnessState.Builder.from(state);
        builder.setShouldUseAutoBrightness(
                autoStrat != null && autoStrat.shouldUseAutoBrightness());
        return builder.build();
    }

    @GuardedBy("mLock")
    private void setTemporaryBrightnessLocked(float temporaryBrightness) {
        mDisplayBrightnessStrategySelector.getTemporaryDisplayBrightnessStrategy()
+12 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.Display;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy;
import com.android.server.display.brightness.strategy.BoostBrightnessStrategy;
import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy;
import com.android.server.display.brightness.strategy.DozeBrightnessStrategy;
@@ -60,6 +61,8 @@ public class DisplayBrightnessStrategySelector {
    private final FollowerBrightnessStrategy mFollowerBrightnessStrategy;
    // The brightness strategy used to manage the brightness state when the request is invalid.
    private final InvalidBrightnessStrategy mInvalidBrightnessStrategy;
    // Controls brightness when automatic (adaptive) brightness is running.
    private final AutomaticBrightnessStrategy mAutomaticBrightnessStrategy;

    // We take note of the old brightness strategy so that we can know when the strategy changes.
    private String mOldBrightnessStrategyName;
@@ -81,6 +84,7 @@ public class DisplayBrightnessStrategySelector {
        mBoostBrightnessStrategy = injector.getBoostBrightnessStrategy();
        mFollowerBrightnessStrategy = injector.getFollowerBrightnessStrategy(displayId);
        mInvalidBrightnessStrategy = injector.getInvalidBrightnessStrategy();
        mAutomaticBrightnessStrategy = injector.getAutomaticBrightnessStrategy(context, displayId);
        mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean(
                R.bool.config_allowAutoBrightnessWhileDozing);
        mOldBrightnessStrategyName = mInvalidBrightnessStrategy.getName();
@@ -130,6 +134,10 @@ public class DisplayBrightnessStrategySelector {
        return mFollowerBrightnessStrategy;
    }

    public AutomaticBrightnessStrategy getAutomaticBrightnessStrategy() {
        return mAutomaticBrightnessStrategy;
    }

    /**
     * Returns a boolean flag indicating if the light sensor is to be used to decide the screen
     * brightness when dozing
@@ -198,5 +206,9 @@ public class DisplayBrightnessStrategySelector {
        InvalidBrightnessStrategy getInvalidBrightnessStrategy() {
            return new InvalidBrightnessStrategy();
        }

        AutomaticBrightnessStrategy getAutomaticBrightnessStrategy(Context context, int displayId) {
            return new AutomaticBrightnessStrategy(context, displayId);
        }
    }
}
+32 −7
Original line number Diff line number Diff line
@@ -43,25 +43,50 @@ public class DisplayBrightnessStateTest {
    public void validateAllDisplayBrightnessStateFieldsAreSetAsExpected() {
        float brightness = 0.3f;
        float sdrBrightness = 0.2f;
        boolean shouldUseAutoBrightness = true;
        BrightnessReason brightnessReason = new BrightnessReason();
        brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
        brightnessReason.setModifier(BrightnessReason.MODIFIER_DIMMED);
        DisplayBrightnessState displayBrightnessState =
                mDisplayBrightnessStateBuilder.setBrightness(brightness).setSdrBrightness(
                        sdrBrightness).setBrightnessReason(brightnessReason).build();
        DisplayBrightnessState displayBrightnessState = mDisplayBrightnessStateBuilder
                .setBrightness(brightness)
                .setSdrBrightness(sdrBrightness)
                .setBrightnessReason(brightnessReason)
                .setShouldUseAutoBrightness(shouldUseAutoBrightness)
                .build();

        assertEquals(displayBrightnessState.getBrightness(), brightness, FLOAT_DELTA);
        assertEquals(displayBrightnessState.getSdrBrightness(), sdrBrightness, FLOAT_DELTA);
        assertEquals(displayBrightnessState.getBrightnessReason(), brightnessReason);
        assertEquals(displayBrightnessState.getShouldUseAutoBrightness(), shouldUseAutoBrightness);
        assertEquals(displayBrightnessState.toString(), getString(displayBrightnessState));
    }

    @Test
    public void testFrom() {
        BrightnessReason reason = new BrightnessReason();
        reason.setReason(BrightnessReason.REASON_MANUAL);
        reason.setModifier(BrightnessReason.MODIFIER_DIMMED);
        DisplayBrightnessState state1 = new DisplayBrightnessState.Builder()
                .setBrightnessReason(reason)
                .setBrightness(0.26f)
                .setSdrBrightness(0.23f)
                .setShouldUseAutoBrightness(false)
                .build();
        DisplayBrightnessState state2 = DisplayBrightnessState.Builder.from(state1).build();
        assertEquals(state1, state2);
    }

    private String getString(DisplayBrightnessState displayBrightnessState) {
        StringBuilder sb = new StringBuilder();
        sb.append("DisplayBrightnessState:");
        sb.append("\n    brightness:" + displayBrightnessState.getBrightness());
        sb.append("\n    sdrBrightness:" + displayBrightnessState.getSdrBrightness());
        sb.append("\n    brightnessReason:" + displayBrightnessState.getBrightnessReason());
        sb.append("DisplayBrightnessState:")
                .append("\n    brightness:")
                .append(displayBrightnessState.getBrightness())
                .append("\n    sdrBrightness:")
                .append(displayBrightnessState.getSdrBrightness())
                .append("\n    brightnessReason:")
                .append(displayBrightnessState.getBrightnessReason())
                .append("\n    shouldUseAutoBrightness:")
                .append(displayBrightnessState.getShouldUseAutoBrightness());
        return sb.toString();
    }
}
Loading