Loading core/java/android/provider/Settings.java +4 −1 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import android.util.MemoryIntArray; import android.view.textservice.TextServicesManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.ColorDisplayController; import com.android.internal.widget.ILockSettings; import java.io.IOException; Loading Loading @@ -3147,7 +3148,9 @@ public final class Settings { public static final String DISPLAY_COLOR_MODE = "display_color_mode"; private static final Validator DISPLAY_COLOR_MODE_VALIDATOR = new SettingsValidators.InclusiveIntegerRangeValidator(0, 2); new SettingsValidators.InclusiveIntegerRangeValidator( ColorDisplayController.COLOR_MODE_NATURAL, ColorDisplayController.COLOR_MODE_AUTOMATIC); /** * The amount of time in milliseconds before the device goes to sleep or begins Loading core/java/com/android/internal/app/ColorDisplayController.java +57 −12 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ public final class ColorDisplayController { public static final int AUTO_MODE_TWILIGHT = 2; @Retention(RetentionPolicy.SOURCE) @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED }) @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED, COLOR_MODE_AUTOMATIC }) public @interface ColorMode {} /** Loading @@ -103,12 +103,12 @@ public final class ColorDisplayController { * @see #setColorMode(int) */ public static final int COLOR_MODE_SATURATED = 2; /** * See com.android.server.display.DisplayTransformManager. * Color mode with automatic colors. * * @see #setColorMode(int) */ private static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation"; private static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode"; public static final int COLOR_MODE_AUTOMATIC = 3; private final Context mContext; private final int mUserId; Loading Loading @@ -361,6 +361,41 @@ public final class ColorDisplayController { Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId); } /** * Get the current color mode from system properties, or return -1. * * See com.android.server.display.DisplayTransformManager. */ private @ColorMode int getCurrentColorModeFromSystemProperties() { int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0); if (displayColorSetting == 0) { return "1.0".equals(SystemProperties.get("persist.sys.sf.color_saturation")) ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; } else if (displayColorSetting == 1) { return COLOR_MODE_SATURATED; } else if (displayColorSetting == 2) { return COLOR_MODE_AUTOMATIC; } else { return -1; } } private boolean isColorModeAvailable(@ColorMode int colorMode) { // SATURATED is always allowed if (colorMode == COLOR_MODE_SATURATED) { return true; } final int[] availableColorModes = mContext.getResources().getIntArray( R.array.config_availableColorModes); for (int mode : availableColorModes) { if (mode == colorMode) { return true; } } return false; } /** * Get the current color mode. */ Loading @@ -369,17 +404,27 @@ public final class ColorDisplayController { return COLOR_MODE_SATURATED; } final int colorMode = System.getIntForUser(mContext.getContentResolver(), int colorMode = System.getIntForUser(mContext.getContentResolver(), System.DISPLAY_COLOR_MODE, -1, mUserId); if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) { if (colorMode == -1) { // There still might be a legacy system property controlling color mode that we need to // respect. if ("1".equals(SystemProperties.get(PERSISTENT_PROPERTY_NATIVE_MODE))) { return COLOR_MODE_SATURATED; colorMode = getCurrentColorModeFromSystemProperties(); } // This happens when a color mode is no longer available (e.g., after system update or B&R) // or the device does not support any color mode. if (!isColorModeAvailable(colorMode)) { if (colorMode == COLOR_MODE_BOOSTED && isColorModeAvailable(COLOR_MODE_NATURAL)) { colorMode = COLOR_MODE_NATURAL; } else if (colorMode == COLOR_MODE_SATURATED && isColorModeAvailable(COLOR_MODE_AUTOMATIC)) { colorMode = COLOR_MODE_AUTOMATIC; } else { colorMode = COLOR_MODE_SATURATED; } return "1.0".equals(SystemProperties.get(PERSISTENT_PROPERTY_SATURATION)) ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; } return colorMode; } Loading @@ -389,7 +434,7 @@ public final class ColorDisplayController { * @param colorMode the color mode */ public void setColorMode(@ColorMode int colorMode) { if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) { if (!isColorModeAvailable(colorMode)) { throw new IllegalArgumentException("Invalid colorMode: " + colorMode); } System.putIntForUser(mContext.getContentResolver(), System.DISPLAY_COLOR_MODE, colorMode, Loading core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -948,6 +948,16 @@ <!-- B y-intercept --> <item>-0.198650895</item> </string-array> <!-- Indicate available ColorDisplayController.COLOR_MODE_xxx. --> <integer-array name="config_availableColorModes"> <!-- Example: <item>0</item> <item>1</item> <item>2</item> --> </integer-array> <!-- Indicate whether to allow the device to suspend when the screen is off due to the proximity sensor. This resource should only be set to true if the sensor HAL correctly handles the proximity sensor as a wake-up source. Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -2964,6 +2964,7 @@ <java-symbol type="integer" name="config_nightDisplayColorTemperatureMax" /> <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficients" /> <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficientsNative" /> <java-symbol type="array" name="config_availableColorModes" /> <!-- Default first user restrictions --> <java-symbol type="array" name="config_defaultFirstUserRestrictions" /> Loading services/core/java/com/android/server/display/ColorDisplayService.java +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ public final class ColorDisplayService extends SystemService mColorMatrixAnimator.cancel(); } setCoefficientMatrix(getContext(), mode == ColorDisplayController.COLOR_MODE_SATURATED); setCoefficientMatrix(getContext(), DisplayTransformManager.isColorModeNative(mode)); setMatrix(mController.getColorTemperature(), mMatrixNight); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); Loading Loading
core/java/android/provider/Settings.java +4 −1 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import android.util.MemoryIntArray; import android.view.textservice.TextServicesManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.ColorDisplayController; import com.android.internal.widget.ILockSettings; import java.io.IOException; Loading Loading @@ -3147,7 +3148,9 @@ public final class Settings { public static final String DISPLAY_COLOR_MODE = "display_color_mode"; private static final Validator DISPLAY_COLOR_MODE_VALIDATOR = new SettingsValidators.InclusiveIntegerRangeValidator(0, 2); new SettingsValidators.InclusiveIntegerRangeValidator( ColorDisplayController.COLOR_MODE_NATURAL, ColorDisplayController.COLOR_MODE_AUTOMATIC); /** * The amount of time in milliseconds before the device goes to sleep or begins Loading
core/java/com/android/internal/app/ColorDisplayController.java +57 −12 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ public final class ColorDisplayController { public static final int AUTO_MODE_TWILIGHT = 2; @Retention(RetentionPolicy.SOURCE) @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED }) @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED, COLOR_MODE_AUTOMATIC }) public @interface ColorMode {} /** Loading @@ -103,12 +103,12 @@ public final class ColorDisplayController { * @see #setColorMode(int) */ public static final int COLOR_MODE_SATURATED = 2; /** * See com.android.server.display.DisplayTransformManager. * Color mode with automatic colors. * * @see #setColorMode(int) */ private static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation"; private static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode"; public static final int COLOR_MODE_AUTOMATIC = 3; private final Context mContext; private final int mUserId; Loading Loading @@ -361,6 +361,41 @@ public final class ColorDisplayController { Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId); } /** * Get the current color mode from system properties, or return -1. * * See com.android.server.display.DisplayTransformManager. */ private @ColorMode int getCurrentColorModeFromSystemProperties() { int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0); if (displayColorSetting == 0) { return "1.0".equals(SystemProperties.get("persist.sys.sf.color_saturation")) ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; } else if (displayColorSetting == 1) { return COLOR_MODE_SATURATED; } else if (displayColorSetting == 2) { return COLOR_MODE_AUTOMATIC; } else { return -1; } } private boolean isColorModeAvailable(@ColorMode int colorMode) { // SATURATED is always allowed if (colorMode == COLOR_MODE_SATURATED) { return true; } final int[] availableColorModes = mContext.getResources().getIntArray( R.array.config_availableColorModes); for (int mode : availableColorModes) { if (mode == colorMode) { return true; } } return false; } /** * Get the current color mode. */ Loading @@ -369,17 +404,27 @@ public final class ColorDisplayController { return COLOR_MODE_SATURATED; } final int colorMode = System.getIntForUser(mContext.getContentResolver(), int colorMode = System.getIntForUser(mContext.getContentResolver(), System.DISPLAY_COLOR_MODE, -1, mUserId); if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) { if (colorMode == -1) { // There still might be a legacy system property controlling color mode that we need to // respect. if ("1".equals(SystemProperties.get(PERSISTENT_PROPERTY_NATIVE_MODE))) { return COLOR_MODE_SATURATED; colorMode = getCurrentColorModeFromSystemProperties(); } // This happens when a color mode is no longer available (e.g., after system update or B&R) // or the device does not support any color mode. if (!isColorModeAvailable(colorMode)) { if (colorMode == COLOR_MODE_BOOSTED && isColorModeAvailable(COLOR_MODE_NATURAL)) { colorMode = COLOR_MODE_NATURAL; } else if (colorMode == COLOR_MODE_SATURATED && isColorModeAvailable(COLOR_MODE_AUTOMATIC)) { colorMode = COLOR_MODE_AUTOMATIC; } else { colorMode = COLOR_MODE_SATURATED; } return "1.0".equals(SystemProperties.get(PERSISTENT_PROPERTY_SATURATION)) ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; } return colorMode; } Loading @@ -389,7 +434,7 @@ public final class ColorDisplayController { * @param colorMode the color mode */ public void setColorMode(@ColorMode int colorMode) { if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) { if (!isColorModeAvailable(colorMode)) { throw new IllegalArgumentException("Invalid colorMode: " + colorMode); } System.putIntForUser(mContext.getContentResolver(), System.DISPLAY_COLOR_MODE, colorMode, Loading
core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -948,6 +948,16 @@ <!-- B y-intercept --> <item>-0.198650895</item> </string-array> <!-- Indicate available ColorDisplayController.COLOR_MODE_xxx. --> <integer-array name="config_availableColorModes"> <!-- Example: <item>0</item> <item>1</item> <item>2</item> --> </integer-array> <!-- Indicate whether to allow the device to suspend when the screen is off due to the proximity sensor. This resource should only be set to true if the sensor HAL correctly handles the proximity sensor as a wake-up source. Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -2964,6 +2964,7 @@ <java-symbol type="integer" name="config_nightDisplayColorTemperatureMax" /> <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficients" /> <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficientsNative" /> <java-symbol type="array" name="config_availableColorModes" /> <!-- Default first user restrictions --> <java-symbol type="array" name="config_defaultFirstUserRestrictions" /> Loading
services/core/java/com/android/server/display/ColorDisplayService.java +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ public final class ColorDisplayService extends SystemService mColorMatrixAnimator.cancel(); } setCoefficientMatrix(getContext(), mode == ColorDisplayController.COLOR_MODE_SATURATED); setCoefficientMatrix(getContext(), DisplayTransformManager.isColorModeNative(mode)); setMatrix(mController.getColorTemperature(), mMatrixNight); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); Loading