diff options
5 files changed, 143 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java index 1f9df9ec5662..e24872e5ca09 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController2.java +++ b/services/core/java/com/android/server/display/DisplayPowerController2.java @@ -291,7 +291,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal private boolean mAppliedDimming; private boolean mAppliedLowPower; private boolean mAppliedTemporaryAutoBrightnessAdjustment; - private boolean mAppliedBrightnessBoost; private boolean mAppliedThrottling; // Reason for which the brightness was last changed. See {@link BrightnessReason} for more @@ -1202,18 +1201,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal brightnessAdjustmentFlags = BrightnessReason.ADJUSTMENT_AUTO; mAppliedTemporaryAutoBrightnessAdjustment = false; } - // Apply brightness boost. - // We do this here after deciding whether auto-brightness is enabled so that we don't - // disable the light sensor during this temporary state. That way when boost ends we will - // be able to resume normal auto-brightness behavior without any delay. - if (mPowerRequest.boostScreenBrightness - && brightnessState != PowerManager.BRIGHTNESS_OFF_FLOAT) { - brightnessState = PowerManager.BRIGHTNESS_MAX; - mBrightnessReasonTemp.setReason(BrightnessReason.REASON_BOOST); - mAppliedBrightnessBoost = true; - } else { - mAppliedBrightnessBoost = false; - } // If the brightness is already set then it's been overridden by something other than the // user, or is a temporary adjustment. @@ -2227,7 +2214,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal pw.println(" mAppliedThrottling=" + mAppliedThrottling); pw.println(" mAppliedTemporaryAutoBrightnessAdjustment=" + mAppliedTemporaryAutoBrightnessAdjustment); - pw.println(" mAppliedBrightnessBoost=" + mAppliedBrightnessBoost); pw.println(" mDozing=" + mDozing); pw.println(" mSkipRampState=" + skipRampStateToString(mSkipRampState)); pw.println(" mScreenOnBlockStartRealTime=" + mScreenOnBlockStartRealTime); diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java index 4759b7df69ab..7d05f139c69d 100644 --- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java @@ -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.BoostBrightnessStrategy; import com.android.server.display.brightness.strategy.DisplayBrightnessStrategy; import com.android.server.display.brightness.strategy.DozeBrightnessStrategy; import com.android.server.display.brightness.strategy.InvalidBrightnessStrategy; @@ -52,6 +53,8 @@ public class DisplayBrightnessStrategySelector { private final OverrideBrightnessStrategy mOverrideBrightnessStrategy; // The brightness strategy used to manage the brightness state in temporary state private final TemporaryBrightnessStrategy mTemporaryBrightnessStrategy; + // The brightness strategy used to manage the brightness state when boost is requested + private final BoostBrightnessStrategy mBoostBrightnessStrategy; // The brightness strategy used to manage the brightness state when the request is invalid. private final InvalidBrightnessStrategy mInvalidBrightnessStrategy; @@ -72,6 +75,7 @@ public class DisplayBrightnessStrategySelector { mScreenOffBrightnessStrategy = injector.getScreenOffBrightnessStrategy(); mOverrideBrightnessStrategy = injector.getOverrideBrightnessStrategy(); mTemporaryBrightnessStrategy = injector.getTemporaryBrightnessStrategy(); + mBoostBrightnessStrategy = injector.getBoostBrightnessStrategy(); mInvalidBrightnessStrategy = injector.getInvalidBrightnessStrategy(); mAllowAutoBrightnessWhileDozingConfig = context.getResources().getBoolean( R.bool.config_allowAutoBrightnessWhileDozing); @@ -89,6 +93,8 @@ public class DisplayBrightnessStrategySelector { DisplayBrightnessStrategy displayBrightnessStrategy = mInvalidBrightnessStrategy; if (targetDisplayState == Display.STATE_OFF) { displayBrightnessStrategy = mScreenOffBrightnessStrategy; + } else if (displayPowerRequest.boostScreenBrightness) { + displayBrightnessStrategy = mBoostBrightnessStrategy; } else if (shouldUseDozeBrightnessStrategy(displayPowerRequest)) { displayBrightnessStrategy = mDozeBrightnessStrategy; } else if (BrightnessUtils @@ -170,6 +176,10 @@ public class DisplayBrightnessStrategySelector { return new TemporaryBrightnessStrategy(); } + BoostBrightnessStrategy getBoostBrightnessStrategy() { + return new BoostBrightnessStrategy(); + } + InvalidBrightnessStrategy getInvalidBrightnessStrategy() { return new InvalidBrightnessStrategy(); } diff --git a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java new file mode 100644 index 000000000000..475ef5012751 --- /dev/null +++ b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2022 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.strategy; + +import android.hardware.display.DisplayManagerInternal; +import android.os.PowerManager; + +import com.android.server.display.DisplayBrightnessState; +import com.android.server.display.brightness.BrightnessReason; +import com.android.server.display.brightness.BrightnessUtils; + +/** + * Manages the brightness of the display when the system brightness boost is requested. + */ +public class BoostBrightnessStrategy implements DisplayBrightnessStrategy { + + public BoostBrightnessStrategy() { + } + + // Set the brightness to the maximum value when display brightness boost is requested + @Override + public DisplayBrightnessState updateBrightness( + DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) { + // Todo(brup): Introduce a validator class and add validations before setting the brightness + DisplayBrightnessState displayBrightnessState = + BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_BOOST, + PowerManager.BRIGHTNESS_MAX, + PowerManager.BRIGHTNESS_MAX); + return displayBrightnessState; + } + + @Override + public String getName() { + return "BoostBrightnessStrategy"; + } +} diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java index a5d7a109eb83..dcf217c35c18 100644 --- a/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java +++ b/services/tests/servicestests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java @@ -29,6 +29,7 @@ import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; +import com.android.server.display.brightness.strategy.BoostBrightnessStrategy; import com.android.server.display.brightness.strategy.DozeBrightnessStrategy; import com.android.server.display.brightness.strategy.InvalidBrightnessStrategy; import com.android.server.display.brightness.strategy.OverrideBrightnessStrategy; @@ -56,6 +57,8 @@ public final class DisplayBrightnessStrategySelectorTest { @Mock private TemporaryBrightnessStrategy mTemporaryBrightnessStrategy; @Mock + private BoostBrightnessStrategy mBoostBrightnessStrategy; + @Mock private InvalidBrightnessStrategy mInvalidBrightnessStrategy; @Mock private Context mContext; @@ -92,6 +95,11 @@ public final class DisplayBrightnessStrategySelectorTest { } @Override + BoostBrightnessStrategy getBoostBrightnessStrategy() { + return mBoostBrightnessStrategy; + } + + @Override InvalidBrightnessStrategy getInvalidBrightnessStrategy() { return mInvalidBrightnessStrategy; } @@ -140,6 +148,17 @@ public final class DisplayBrightnessStrategySelectorTest { } @Test + public void selectStrategySelectsBoostStrategyWhenValid() { + DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock( + DisplayManagerInternal.DisplayPowerRequest.class); + displayPowerRequest.boostScreenBrightness = true; + displayPowerRequest.screenBrightnessOverride = Float.NaN; + when(mTemporaryBrightnessStrategy.getTemporaryScreenBrightness()).thenReturn(Float.NaN); + assertEquals(mDisplayBrightnessStrategySelector.selectStrategy(displayPowerRequest, + Display.STATE_ON), mBoostBrightnessStrategy); + } + + @Test public void selectStrategySelectsInvalidStrategyWhenNoStrategyIsValid() { DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock( DisplayManagerInternal.DisplayPowerRequest.class); diff --git a/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java new file mode 100644 index 000000000000..431a239ab4fd --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2022 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.strategy; + + +import static org.junit.Assert.assertEquals; + +import android.hardware.display.DisplayManagerInternal; +import android.os.PowerManager; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.display.DisplayBrightnessState; +import com.android.server.display.brightness.BrightnessReason; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@SmallTest +@RunWith(AndroidJUnit4.class) + +public class BoostBrightnessStrategyTest { + private BoostBrightnessStrategy mBoostBrightnessStrategy; + + @Before + public void before() { + mBoostBrightnessStrategy = new BoostBrightnessStrategy(); + } + + @Test + public void updateBrightnessWorksAsExpectedWhenBoostBrightnessIsRequested() { + DisplayManagerInternal.DisplayPowerRequest + displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest(); + displayPowerRequest.boostScreenBrightness = true; + BrightnessReason brightnessReason = new BrightnessReason(); + brightnessReason.setReason(BrightnessReason.REASON_BOOST); + DisplayBrightnessState expectedDisplayBrightnessState = + new DisplayBrightnessState.Builder() + .setBrightness(PowerManager.BRIGHTNESS_MAX) + .setBrightnessReason(brightnessReason) + .setSdrBrightness(PowerManager.BRIGHTNESS_MAX) + .build(); + DisplayBrightnessState updatedDisplayBrightnessState = + mBoostBrightnessStrategy.updateBrightness(displayPowerRequest); + assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState); + } + +} |