diff options
11 files changed, 37 insertions, 13 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 48ce8af3737b..7f2c816e5654 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -7237,4 +7237,10 @@ <!-- The name of the system package that will hold the dependency installer role. --> <string name="config_systemDependencyInstaller" translatable="false" /> + + <!-- Whether allow normal brightness when doze policy can be requested. When this is false, + brightness follows the display state i.e. ON means bright, DOZE means dim. If true, + POLICY_DOZE can also dim the screen unless parameter useNormalBrightnessForDoze of + DreamService#setDozeScreenState requests an exception. --> + <bool name="config_allowNormalBrightnessForDozePolicy">false</bool> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 850939f1fd64..2f833cfbc631 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -5799,4 +5799,6 @@ <!-- Style for Wear Material3 Button. Will only be used for sdk 36 or above. --> <java-symbol type="style" name="Widget.DeviceDefault.Button.WearMaterial3" /> + + <java-symbol type="bool" name="config_allowNormalBrightnessForDozePolicy" /> </resources> diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 448c42b71731..805357e79565 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -1280,7 +1280,7 @@ public class AutomaticBrightnessController { private boolean shouldApplyDozeScaleFactor() { // We don't apply the doze scale factor if we have a designated brightness curve for doze. - return (mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled() + return (mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext) ? (!mUseNormalBrightnessForDoze && mDisplayPolicy == POLICY_DOZE) || Display.isDozeState(mDisplayState) : Display.isDozeState(mDisplayState)) && getMode() != AUTO_BRIGHTNESS_MODE_DOZE; diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 2948ae4d83fa..945365dcf8fe 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -1399,7 +1399,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Use doze brightness if one of following is true: // 1. The target `state` isDozeState. // 2. Doze power request(POLICY_DOZE) if there's no exception(useNormalBrightnessForDoze). - final boolean useDozeBrightness = mFlags.isNormalBrightnessForDozeParameterEnabled() + final boolean useDozeBrightness = mFlags.isNormalBrightnessForDozeParameterEnabled(mContext) ? (!mPowerRequest.useNormalBrightnessForDoze && mPowerRequest.policy == POLICY_DOZE) || Display.isDozeState(state) : Display.isDozeState(state); DisplayBrightnessState displayBrightnessState = 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 a0ad49dd9f24..2c6f37448735 100644 --- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java +++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java @@ -109,6 +109,8 @@ public class DisplayBrightnessStrategySelector { private final int mDisplayId; + private final Context mContext; + /** * The constructor of DozeBrightnessStrategy. */ @@ -117,6 +119,7 @@ public class DisplayBrightnessStrategySelector { if (injector == null) { injector = new Injector(); } + mContext = context; mDisplayManagerFlags = flags; mDisplayId = displayId; mDozeBrightnessStrategy = injector.getDozeBrightnessStrategy(); @@ -348,7 +351,7 @@ public class DisplayBrightnessStrategySelector { // a user can define a different display state(displayPowerRequest.dozeScreenState) too // in the request with the Doze policy and user might request an override to force certain // brightness. - return (!mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled() + return (!mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext) || !displayPowerRequest.useNormalBrightnessForDoze) && displayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE && !mAllowAutoBrightnessWhileDozing diff --git a/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java index ff73693d803b..94522d197429 100644 --- a/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java +++ b/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java @@ -525,7 +525,7 @@ public class AutomaticBrightnessStrategy extends AutomaticBrightnessStrategy2 } final boolean shouldUseDozeMode = - mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled() + mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext) ? (!useNormalBrightnessForDoze && policy == POLICY_DOZE) || Display.isDozeState(state) : Display.isDozeState(state); diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java index 1a7d74ae1713..7f46bbbf0507 100644 --- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java +++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java @@ -16,6 +16,7 @@ package com.android.server.display.feature; +import android.content.Context; import android.os.Build; import android.os.SystemProperties; import android.text.TextUtils; @@ -461,8 +462,9 @@ public class DisplayManagerFlags { /** * @return Whether the useDozeBrightness parameter should be used */ - public boolean isNormalBrightnessForDozeParameterEnabled() { - return mNormalBrightnessForDozeParameter.isEnabled(); + public boolean isNormalBrightnessForDozeParameterEnabled(Context context) { + return mNormalBrightnessForDozeParameter.isEnabled() && context.getResources().getBoolean( + com.android.internal.R.bool.config_allowNormalBrightnessForDozePolicy); } /** diff --git a/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java index 312df4391e2d..0e9dfedac0c9 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/AutomaticBrightnessControllerTest.java @@ -1118,7 +1118,8 @@ public class AutomaticBrightnessControllerTest { @Test public void testAutoBrightnessInDoze_useNormalBrightnessForDozeFalse_scaleScreenOn() throws Exception { - when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext)).thenReturn( + true); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); @@ -1154,7 +1155,8 @@ public class AutomaticBrightnessControllerTest { @Test public void testAutoBrightnessInDoze_useNormalBrightnessForDozeTrue_notScaleScreenOn() throws Exception { - when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext)).thenReturn( + true); ArgumentCaptor<SensorEventListener> listenerCaptor = ArgumentCaptor.forClass(SensorEventListener.class); diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java index c9963391470e..91f1aaf603e6 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java @@ -2119,7 +2119,8 @@ public final class DisplayPowerControllerTest { @Test public void testManualBrightness_stateOnPolicyDozeUseNormalBrightnessForDozeFalse_brightnessDoze() { when(mDisplayManagerFlagsMock.isDisplayOffloadEnabled()).thenReturn(true); - when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled( + mContext)).thenReturn(true); mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession); Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, @@ -2154,7 +2155,8 @@ public final class DisplayPowerControllerTest { @Test public void testManualBrightness_stateOnPolicyDozeUseNormalBrightnessForDozeTrue_brightnessNormal() { when(mDisplayManagerFlagsMock.isDisplayOffloadEnabled()).thenReturn(true); - when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled( + mContext)).thenReturn(true); mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession); Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, @@ -2188,7 +2190,8 @@ public final class DisplayPowerControllerTest { @Test public void testManualBrightness_stateDozePolicyOnUseNormalBrightnessForDozeTrue_brightnessDoze() { when(mDisplayManagerFlagsMock.isDisplayOffloadEnabled()).thenReturn(true); - when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlagsMock.isNormalBrightnessForDozeParameterEnabled( + mContext)).thenReturn(true); mHolder.dpc.setDisplayOffloadSession(mDisplayOffloadSession); Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java index a6476910a5de..2ebb6c2a3ce4 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java @@ -207,7 +207,8 @@ public final class DisplayBrightnessStrategySelectorTest { @Test public void selectStrategyWhenValid_useNormalBrightnessForDozeTrue_doNotSelectsDozeStrategy() { - when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext)).thenReturn( + true); DisplayManagerInternal.DisplayPowerRequest displayPowerRequest = mock( DisplayManagerInternal.DisplayPowerRequest.class); displayPowerRequest.policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE; diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java index 65f8ea7bfdfc..4be96c2a2eb3 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; +import android.content.res.Resources; import android.hardware.display.BrightnessConfiguration; import android.hardware.display.DisplayManagerInternal; import android.os.PowerManager; @@ -76,6 +77,9 @@ public class AutomaticBrightnessStrategyTest { @Mock private DisplayManagerFlags mDisplayManagerFlags; + @Mock + private Resources mMockResources; + private BrightnessConfiguration mBrightnessConfiguration; private float mDefaultScreenAutoBrightnessAdjustment; private Context mContext; @@ -378,7 +382,8 @@ public class AutomaticBrightnessStrategyTest { reset(mAutomaticBrightnessController); when(mAutomaticBrightnessController.isInIdleMode()).thenReturn(false); - when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled()).thenReturn(true); + when(mDisplayManagerFlags.isNormalBrightnessForDozeParameterEnabled(mContext)).thenReturn( + true); policy = DisplayManagerInternal.DisplayPowerRequest.POLICY_DOZE; // Validate interaction when automaticBrightnessController is in non-idle mode, display |