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

Commit 78fa5a56 authored by Rupesh Bansal's avatar Rupesh Bansal Committed by Android (Google) Code Review
Browse files

Merge "Moved adjustment flags and brightness setting to ABS" into main

parents e735e89e fffac2db
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