From c71afba06cb9bedfb93c8efe788f9d738f2dfc97 Mon Sep 17 00:00:00 2001 From: Kriti Dang Date: Wed, 14 Dec 2022 15:43:20 +0100 Subject: [PATCH] Apply the setting update on systemReady apart from onDisplayAdded. onDisplayAdded gets called before systemReady, and till that time the correct settings are not yet updated. So, apply the settings on display after they can be fetched correctly. Bug: 261552562 Test: adb shell dumpsys display Change-Id: I23fe147862c58571a0fddcd35de18be20e5074a9 --- .../server/display/DisplayManagerService.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 5e9f0e7bf5bd7..110eb1ec214e8 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -628,7 +628,6 @@ public final class DisplayManagerService extends SystemService { recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY)); updateSettingsLocked(); - updateUserDisabledHdrTypesFromSettingsLocked(); updateUserPreferredDisplayModeSettingsLocked(); } @@ -852,6 +851,15 @@ public final class DisplayManagerService extends SystemService { for (int i = 0; i < userDisabledHdrTypeStrings.length; i++) { mUserDisabledHdrTypes[i] = Integer.parseInt(userDisabledHdrTypeStrings[i]); } + + if (!mAreUserDisabledHdrTypesAllowed) { + mLogicalDisplayMapper.forEachLocked( + display -> { + display.setUserDisabledHdrTypes(mUserDisabledHdrTypes); + handleLogicalDisplayChangedLocked(display); + }); + } + } catch (NumberFormatException e) { Slog.e(TAG, "Failed to parse USER_DISABLED_HDR_FORMATS. " + "Clearing the setting.", e); @@ -879,6 +887,15 @@ public final class DisplayManagerService extends SystemService { Settings.Global.USER_PREFERRED_RESOLUTION_WIDTH, Display.INVALID_DISPLAY_WIDTH); Display.Mode mode = new Display.Mode(width, height, refreshRate); mUserPreferredMode = isResolutionAndRefreshRateValid(mode) ? mode : null; + if (mUserPreferredMode != null) { + mDisplayDeviceRepo.forEachLocked((DisplayDevice device) -> { + device.setUserPreferredDisplayModeLocked(mode); + }); + } else { + mLogicalDisplayMapper.forEachLocked((LogicalDisplay display) -> { + configurePreferredDisplayModeLocked(display); + }); + } } private DisplayInfo getDisplayInfoForFrameRateOverride(DisplayEventReceiver.FrameRateOverride[]