From cc1882f7b4f73196bcaf9467fe7d076f004e01b5 Mon Sep 17 00:00:00 2001 From: Fiona Campbell Date: Thu, 10 Dec 2020 14:53:32 +0000 Subject: [PATCH] Enable per display brightness setting Pass displayId through from brightnesscontroller to settemporarybrightness on the correct displaypowercontroller. Bug: 175286226 Test: atest frameworks/base/services/tests/servicestests/src/com/android/server/display Test: atest ColorModeControls Change-Id: Ibb65b8c5a70445702b711739551ffb9f727ef450 --- core/java/android/hardware/display/DisplayManager.java | 4 ++-- .../java/android/hardware/display/DisplayManagerGlobal.java | 6 +++--- core/java/android/hardware/display/IDisplayManager.aidl | 2 +- core/tests/coretests/src/android/os/BrightnessLimit.java | 3 ++- .../systemui/settings/brightness/BrightnessController.java | 4 +++- .../com/android/server/display/DisplayManagerService.java | 4 ++-- .../src/com/android/test/silkfx/common/ColorModeControls.kt | 4 +++- 7 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 9bae1ff4b906e..bbf421da6b483 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -854,8 +854,8 @@ public final class DisplayManager { * * @hide Requires signature permission. */ - public void setTemporaryBrightness(float brightness) { - mGlobal.setTemporaryBrightness(brightness); + public void setTemporaryBrightness(int displayId, float brightness) { + mGlobal.setTemporaryBrightness(displayId, brightness); } /** diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 77ae9471dfb09..60fe5825d6a1c 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -636,13 +636,13 @@ public final class DisplayManagerGlobal { * Requires the {@link android.Manifest.permission#CONTROL_DISPLAY_BRIGHTNESS} permission. *

* - * @param brightness The brightness value from 0 to 255. + * @param brightness The brightness value from 0.0f to 1.0f. * * @hide Requires signature permission. */ - public void setTemporaryBrightness(float brightness) { + public void setTemporaryBrightness(int displayId, float brightness) { try { - mDm.setTemporaryBrightness(brightness); + mDm.setTemporaryBrightness(displayId, brightness); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index a9f78fa03a6db..ff8a7208a9f0c 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -116,7 +116,7 @@ interface IDisplayManager { boolean isMinimalPostProcessingRequested(int displayId); // Temporarily sets the display brightness. - void setTemporaryBrightness(float brightness); + void setTemporaryBrightness(int displayId, float brightness); // Temporarily sets the auto brightness adjustment factor. void setTemporaryAutoBrightnessAdjustment(float adjustment); diff --git a/core/tests/coretests/src/android/os/BrightnessLimit.java b/core/tests/coretests/src/android/os/BrightnessLimit.java index be7935545543a..219f741d8a08d 100644 --- a/core/tests/coretests/src/android/os/BrightnessLimit.java +++ b/core/tests/coretests/src/android/os/BrightnessLimit.java @@ -42,7 +42,8 @@ public class BrightnessLimit extends Activity implements OnClickListener { public void onClick(View v) { DisplayManager dm = getSystemService(DisplayManager.class); - dm.setTemporaryBrightness(0.0f); + final int displayId = getBaseContext().getDisplay().getDisplayId(); + dm.setTemporaryBrightness(displayId, 0.0f); Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0); } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java index a3b5f27933be1..43bb34380f807 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java @@ -79,6 +79,7 @@ public class BrightnessController implements ToggleSlider.Listener { private final float mMaximumBacklightForVr; private final float mDefaultBacklightForVr; + private final int mDisplayId; private final Context mContext; private final ToggleSlider mControl; private final boolean mAutomaticAvailable; @@ -311,6 +312,7 @@ public class BrightnessController implements ToggleSlider.Listener { }; mBrightnessObserver = new BrightnessObserver(mHandler); + mDisplayId = mContext.getDisplayId(); PowerManager pm = context.getSystemService(PowerManager.class); mMinimumBacklight = pm.getBrightnessConstraint( PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM); @@ -420,7 +422,7 @@ public class BrightnessController implements ToggleSlider.Listener { } private void setBrightness(float brightness) { - mDisplayManager.setTemporaryBrightness(brightness); + mDisplayManager.setTemporaryBrightness(mDisplayId, brightness); } private void updateVrMode(boolean isEnabled) { diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index c3f8d8cf219ac..a0db7fa3de964 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -2527,14 +2527,14 @@ public final class DisplayManagerService extends SystemService { } @Override // Binder call - public void setTemporaryBrightness(float brightness) { + public void setTemporaryBrightness(int displayId, float brightness) { mContext.enforceCallingOrSelfPermission( Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS, "Permission required to set the display's brightness"); final long token = Binder.clearCallingIdentity(); try { synchronized (mSyncRoot) { - mDisplayPowerControllers.get(Display.DEFAULT_DISPLAY) + mDisplayPowerControllers.get(displayId) .setTemporaryBrightness(brightness); } } finally { diff --git a/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt b/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt index 9b15b0445642d..5c2644844e14a 100644 --- a/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt +++ b/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt @@ -34,12 +34,14 @@ class ColorModeControls : LinearLayout, WindowObserver { constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { displayManager = context.getSystemService(DisplayManager::class.java)!! + displayId = context.getDisplayId() } private var window: Window? = null private var currentModeDisplay: TextView? = null private val displayManager: DisplayManager private var targetSdrWhitePointIndex = 0 + private var displayId: Int private val whitePoint get() = SDR_WHITE_POINTS[targetSdrWhitePointIndex] @@ -107,7 +109,7 @@ class ColorModeControls : LinearLayout, WindowObserver { // Imperfect, but close enough, synchronization by waiting for frame commit to set the value viewTreeObserver.registerFrameCommitCallback { try { - displayManager.setTemporaryBrightness(level) + displayManager.setTemporaryBrightness(displayId, level) } catch (ex: Exception) { // Ignore a permission denied rejection - it doesn't meaningfully change much }