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

Commit fffac2db authored by Rupesh Bansal's avatar Rupesh Bansal
Browse files

Moved adjustment flags and brightness setting to ABS

Bug: 294444204
Test: atest com.android.server.display.brightness
Change-Id: I086527be41dbb78d9e05e5db9bb64da8b5f06bc3
parent 27cd25d2
Loading
Loading
Loading
Loading
+33 −3
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public final class DisplayBrightnessState {
    private final float mCustomAnimationRate;

    private final BrightnessEvent mBrightnessEvent;
    private final int mBrightnessAdjustmentFlag;

    private DisplayBrightnessState(Builder builder) {
        mBrightness = builder.getBrightness();
@@ -58,6 +59,7 @@ public final class DisplayBrightnessState {
        mCustomAnimationRate = builder.getCustomAnimationRate();
        mShouldUpdateScreenBrightnessSetting = builder.shouldUpdateScreenBrightnessSetting();
        mBrightnessEvent = builder.getBrightnessEvent();
        mBrightnessAdjustmentFlag = builder.getBrightnessAdjustmentFlag();
    }

    /**
@@ -138,6 +140,14 @@ public final class DisplayBrightnessState {
        return mBrightnessEvent;
    }

    /**
     * Gets the flag representing the reason for the brightness adjustment. This can be
     * automatic(e.g. because of the change in the lux), or user initiated(e.g. moving the slider)
     */
    public int getBrightnessAdjustmentFlag() {
        return mBrightnessAdjustmentFlag;
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:");
@@ -157,6 +167,7 @@ public final class DisplayBrightnessState {
                .append(mShouldUpdateScreenBrightnessSetting);
        stringBuilder.append("\n    mBrightnessEvent:")
                .append(Objects.toString(mBrightnessEvent, "null"));
        stringBuilder.append("\n    mBrightnessAdjustmentFlag:").append(mBrightnessAdjustmentFlag);
        return stringBuilder.toString();
    }

@@ -187,7 +198,8 @@ public final class DisplayBrightnessState {
                && mCustomAnimationRate == otherState.getCustomAnimationRate()
                && mShouldUpdateScreenBrightnessSetting
                    == otherState.shouldUpdateScreenBrightnessSetting()
                && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent());
                && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent())
                && mBrightnessAdjustmentFlag == otherState.getBrightnessAdjustmentFlag();
    }

    @Override
@@ -195,7 +207,7 @@ public final class DisplayBrightnessState {
        return Objects.hash(mBrightness, mSdrBrightness, mBrightnessReason,
                mShouldUseAutoBrightness, mIsSlowChange, mMaxBrightness, mMinBrightness,
                mCustomAnimationRate,
                mShouldUpdateScreenBrightnessSetting, mBrightnessEvent);
                mShouldUpdateScreenBrightnessSetting, mBrightnessEvent, mBrightnessAdjustmentFlag);
    }

    /**
@@ -222,6 +234,8 @@ public final class DisplayBrightnessState {

        private BrightnessEvent mBrightnessEvent;

        public int mBrightnessAdjustmentFlag = 0;

        /**
         * Create a builder starting with the values from the specified {@link
         * DisplayBrightnessState}.
@@ -242,6 +256,7 @@ public final class DisplayBrightnessState {
            builder.setShouldUpdateScreenBrightnessSetting(
                    state.shouldUpdateScreenBrightnessSetting());
            builder.setBrightnessEvent(state.getBrightnessEvent());
            builder.setBrightnessAdjustmentFlag(state.getBrightnessAdjustmentFlag());
            return builder;
        }

@@ -418,7 +433,6 @@ public final class DisplayBrightnessState {
            return new DisplayBrightnessState(this);
        }


        /**
         * This is used to get the BrightnessEvent object from its builder
         */
@@ -434,5 +448,21 @@ public final class DisplayBrightnessState {
            mBrightnessEvent = brightnessEvent;
            return this;
        }

        /**
         * This is used to get the brightness adjustment flag from its builder
         */
        public int getBrightnessAdjustmentFlag() {
            return mBrightnessAdjustmentFlag;
        }


        /**
         * This is used to set the brightness adjustment flag
         */
        public Builder setBrightnessAdjustmentFlag(int brightnessAdjustmentFlag) {
            mBrightnessAdjustmentFlag = brightnessAdjustmentFlag;
            return this;
        }
    }
}
+1 −5
Original line number Diff line number Diff line
@@ -1345,6 +1345,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        boolean slowChange = displayBrightnessState.isSlowChange();
        // custom transition duration
        float customAnimationRate = displayBrightnessState.getCustomAnimationRate();
        int brightnessAdjustmentFlags = displayBrightnessState.getBrightnessAdjustmentFlag();
        final boolean userSetBrightnessChanged =
                mDisplayBrightnessController.getIsUserSetScreenBrightnessUpdated();
        if (displayBrightnessState.getBrightnessEvent() != null) {
@@ -1392,15 +1393,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                displayBrightnessState.shouldUpdateScreenBrightnessSetting();
        float currentBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness();
        // Apply auto-brightness.
        int brightnessAdjustmentFlags = 0;
        // All the conditions inside this if block will be moved to AutomaticBrightnessStrategy
        if (mFlags.isRefactorDisplayPowerControllerEnabled()
                && displayBrightnessState.getBrightnessReason().getReason()
                        == BrightnessReason.REASON_AUTOMATIC) {
            brightnessAdjustmentFlags =
                    mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentReasonsFlags();
            updateScreenBrightnessSetting = currentBrightnessSetting != brightnessState;
            mBrightnessReasonTemp.setReason(BrightnessReason.REASON_AUTOMATIC);
            if (mScreenOffBrightnessSensorController != null) {
                mScreenOffBrightnessSensorController.setLightSensorEnabled(false);
            }
+8 −1
Original line number Diff line number Diff line
@@ -146,7 +146,8 @@ public final class DisplayBrightnessController {
        synchronized (mLock) {
            mDisplayBrightnessStrategy = mDisplayBrightnessStrategySelector.selectStrategy(
                    constructStrategySelectionRequest(displayPowerRequest, targetDisplayState));
            state = mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest);
            state = mDisplayBrightnessStrategy
                        .updateBrightness(constructStrategyExecutionRequest(displayPowerRequest));
        }

        // This is a temporary measure until AutomaticBrightnessStrategy works as a traditional
@@ -550,4 +551,10 @@ public final class DisplayBrightnessController {
        return new StrategySelectionRequest(displayPowerRequest, targetDisplayState,
                lastUserSetScreenBrightness, userSetBrightnessChanged);
    }

    private StrategyExecutionRequest constructStrategyExecutionRequest(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
        float currentScreenBrightness = getCurrentBrightness();
        return new StrategyExecutionRequest(displayPowerRequest, currentScreenBrightness);
    }
}
+60 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.display.brightness;

import android.hardware.display.DisplayManagerInternal;

import java.util.Objects;

/**
 * A wrapper class to encapsulate the request to execute the selected strategy
 */
public final class StrategyExecutionRequest {
    // The request to change the associated display's state and brightness
    private final DisplayManagerInternal.DisplayPowerRequest mDisplayPowerRequest;

    private final float mCurrentScreenBrightness;

    public StrategyExecutionRequest(DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
            float currentScreenBrightness) {
        mDisplayPowerRequest = displayPowerRequest;
        mCurrentScreenBrightness = currentScreenBrightness;
    }

    public DisplayManagerInternal.DisplayPowerRequest getDisplayPowerRequest() {
        return mDisplayPowerRequest;
    }

    public float getCurrentScreenBrightness() {
        return mCurrentScreenBrightness;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof StrategyExecutionRequest)) {
            return false;
        }
        StrategyExecutionRequest other = (StrategyExecutionRequest) obj;
        return Objects.equals(mDisplayPowerRequest, other.getDisplayPowerRequest())
                && mCurrentScreenBrightness == other.getCurrentScreenBrightness();
    }

    @Override
    public int hashCode() {
        return Objects.hash(mDisplayPowerRequest, mCurrentScreenBrightness);
    }
}
+26 −11
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.hardware.display.DisplayManagerInternal.DisplayPowerReques
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
@@ -32,6 +31,7 @@ import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;

import java.io.PrintWriter;
@@ -96,13 +96,21 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2
    // want to re-evaluate the auto-brightness state
    private boolean mIsConfigured;

    public AutomaticBrightnessStrategy(Context context, int displayId) {
    private Injector mInjector;

    @VisibleForTesting
    AutomaticBrightnessStrategy(Context context, int displayId, Injector injector) {
        super(context, displayId);
        mContext = context;
        mDisplayId = displayId;
        mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
        mPendingAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mTemporaryAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mInjector = (injector == null) ? new RealInjector() : injector;
    }

    public AutomaticBrightnessStrategy(Context context, int displayId) {
        this(context, displayId, null);
    }

    /**
@@ -252,10 +260,10 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2

    @Override
    public DisplayBrightnessState updateBrightness(
            DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
            StrategyExecutionRequest strategyExecutionRequest) {
        BrightnessReason brightnessReason = new BrightnessReason();
        brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
        BrightnessEvent brightnessEvent = new BrightnessEvent(mDisplayId);
        BrightnessEvent brightnessEvent = mInjector.getBrightnessEvent(mDisplayId);
        float brightness = getAutomaticScreenBrightness(brightnessEvent);
        return new DisplayBrightnessState.Builder()
                .setBrightness(brightness)
@@ -265,6 +273,9 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2
                .setIsSlowChange(hasAppliedAutoBrightness()
                        && !getAutoBrightnessAdjustmentChanged())
                .setBrightnessEvent(brightnessEvent)
                .setBrightnessAdjustmentFlag(mAutoBrightnessAdjustmentReasonsFlags)
                .setShouldUpdateScreenBrightnessSetting(
                        brightness != strategyExecutionRequest.getCurrentScreenBrightness())
                .build();
    }

@@ -359,13 +370,6 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2
        return brightness;
    }

    /**
     * Gets the auto-brightness adjustment flag change reason
     */
    public int getAutoBrightnessAdjustmentReasonsFlags() {
        return mAutoBrightnessAdjustmentReasonsFlags;
    }

    /**
     * Returns if the auto brightness has been applied
     */
@@ -497,4 +501,15 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2
                Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f, UserHandle.USER_CURRENT);
        return Float.isNaN(adj) ? 0.0f : BrightnessUtils.clampBrightnessAdjustment(adj);
    }

    @VisibleForTesting
    interface Injector {
        BrightnessEvent getBrightnessEvent(int displayId);
    }

    static class RealInjector implements Injector {
        public BrightnessEvent getBrightnessEvent(int displayId) {
            return new BrightnessEvent(displayId);
        }
    }
}
Loading