diff options
| author | 2022-12-05 17:47:58 +0000 | |
|---|---|---|
| committer | 2022-12-05 17:47:58 +0000 | |
| commit | 5644553419b012f64caa24e327fcd2e47b529d1c (patch) | |
| tree | 5f46e89cca1a29d708bbce6b7a3cbcc1bf4b42dd | |
| parent | 0760dd87fb3a7d522a4fec3b2d469d66478609e6 (diff) | |
| parent | b06d0a7ec9f5b4badbbbe1e0f304d7ea9153cc97 (diff) | |
Merge "Added Boost brightness strategy"
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); +    } + +}  |