From a903b8223714f379ee50bffceb362929dbc03f1c Mon Sep 17 00:00:00 2001 From: Adithya R Date: Wed, 15 Jan 2025 17:52:14 +0100 Subject: [PATCH] Settings: Use internal display brightness in overlay displays If settings is running on an overlay display (such as floating window) the context's default display points to the overlay display, which always has its brightness set to 0. Use the internal (default) display's brightness in this case. Change-Id: I973edf8e2b65214df7b716eebb270abf3ad30c09 Signed-off-by: Pranav Vashi Signed-off-by: Dmitrii --- .../BrightnessLevelPreferenceController.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/display/BrightnessLevelPreferenceController.java b/src/com/android/settings/display/BrightnessLevelPreferenceController.java index 2b6e5f6aa1f..4cf1399532b 100644 --- a/src/com/android/settings/display/BrightnessLevelPreferenceController.java +++ b/src/com/android/settings/display/BrightnessLevelPreferenceController.java @@ -35,6 +35,8 @@ import android.os.Process; import android.os.UserManager; import android.provider.Settings.System; import android.text.TextUtils; +import android.view.Display; +import android.view.DisplayInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -170,7 +172,7 @@ public class BrightnessLevelPreferenceController extends BasePreferenceControlle private double getCurrentBrightness() { int value = 0; - final BrightnessInfo info = mContext.getDisplay().getBrightnessInfo(); + final BrightnessInfo info = getDisplay().getBrightnessInfo(); if (info != null) { value = convertLinearToGammaFloat(info.brightness, info.brightnessMinimum, info.brightnessMaximum); @@ -178,6 +180,23 @@ public class BrightnessLevelPreferenceController extends BasePreferenceControlle return getPercentage(value, GAMMA_SPACE_MIN, GAMMA_SPACE_MAX); } + private Display getDisplay() { + final Display currentDisplay = mContext.getDisplay(); + final DisplayInfo info = new DisplayInfo(); + currentDisplay.getDisplayInfo(info); + + if (info.type == Display.TYPE_OVERLAY) { + // try to get the default (internal) display if we are in an overlay display, + // otherwise the brightness is always zero. + final Display defaultDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); + if (defaultDisplay != null) { + return defaultDisplay; + } + } + + return currentDisplay; + } + private double getPercentage(double value, int min, int max) { if (value > max) { return 1.0;