From 4364bbf93f9aeff91f76e78b60ff7aec2efd37e3 Mon Sep 17 00:00:00 2001 From: Damien Bargiacchi Date: Tue, 1 Nov 2016 21:44:20 -0700 Subject: [PATCH] Allow config.xml to set the default display's default color mode Bug: 31928803 Change-Id: I2707ae47611dca134fa9b4afa2d09e0812b3efd3 --- core/res/res/values/config.xml | 6 ++++++ core/res/res/values/symbols.xml | 1 + .../server/display/DisplayManagerService.java | 16 ++++++++++++++++ .../server/display/PersistentDataStore.java | 4 ++-- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index f8c463ce9ba28..90c19fb4e861d 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1936,6 +1936,12 @@ mirror the content of the default display. --> true + + 0 + false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index ecce83368266e..bbfee14201006 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -307,6 +307,7 @@ + diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 971989b212194..9c762cce7e0fa 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -220,6 +220,11 @@ public final class DisplayManagerService extends SystemService { private final DisplayViewport mTempDefaultViewport = new DisplayViewport(); private final DisplayViewport mTempExternalTouchViewport = new DisplayViewport(); + // The default color mode for default displays. Overrides the usual + // Display.Display.COLOR_MODE_DEFAULT for displays with the + // DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY flag set. + private final int mDefaultDisplayDefaultColorMode; + // Temporary list of deferred work to perform when setting the display state. // Only used by requestDisplayState. The field is self-synchronized and only // intended for use inside of the requestGlobalDisplayStateInternal function. @@ -232,6 +237,8 @@ public final class DisplayManagerService extends SystemService { mUiHandler = UiThread.getHandler(); mDisplayAdapterListener = new DisplayAdapterListener(); mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false); + mDefaultDisplayDefaultColorMode = mContext.getResources().getInteger( + com.android.internal.R.integer.config_defaultDisplayDefaultColorMode); PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mGlobalDisplayBrightness = pm.getDefaultScreenBrightnessSetting(); @@ -703,6 +710,14 @@ public final class DisplayManagerService extends SystemService { } if (display != null && display.getPrimaryDisplayDeviceLocked() == device) { int colorMode = mPersistentDataStore.getColorMode(device); + if (colorMode == Display.COLOR_MODE_INVALID) { + if ((device.getDisplayDeviceInfoLocked().flags + & DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY) != 0) { + colorMode = mDefaultDisplayDefaultColorMode; + } else { + colorMode = Display.COLOR_MODE_DEFAULT; + } + } display.setRequestedColorModeLocked(colorMode); } scheduleTraversalLocked(false); @@ -1043,6 +1058,7 @@ public final class DisplayManagerService extends SystemService { pw.println(" mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId); pw.println(" mDefaultViewport=" + mDefaultViewport); pw.println(" mExternalTouchViewport=" + mExternalTouchViewport); + pw.println(" mDefaultDisplayDefaultColorMode=" + mDefaultDisplayDefaultColorMode); pw.println(" mSingleDisplayDemoMode=" + mSingleDisplayDemoMode); pw.println(" mWifiDisplayScanRequestCount=" + mWifiDisplayScanRequestCount); diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java index 5616fb97bad76..47701b99860af 100644 --- a/services/core/java/com/android/server/display/PersistentDataStore.java +++ b/services/core/java/com/android/server/display/PersistentDataStore.java @@ -183,11 +183,11 @@ final class PersistentDataStore { public int getColorMode(DisplayDevice device) { if (!device.hasStableUniqueId()) { - return Display.COLOR_MODE_DEFAULT; + return Display.COLOR_MODE_INVALID; } DisplayState state = getDisplayState(device.getUniqueId(), false); if (state == null) { - return Display.COLOR_MODE_DEFAULT; + return Display.COLOR_MODE_INVALID; } return state.getColorMode(); }