From 218e656e0b49334f592e349781973cc2c84249ac Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Mon, 27 Nov 2017 10:20:14 -0800 Subject: [PATCH] Remove gap applying night display and color mode Bug: 68268324 Test: make -j100 Change-Id: I9be6fe350728944f0e157c1b8928ca1f5b65f4d8 --- .../server/display/ColorDisplayService.java | 23 ++++++++++++------- .../display/DisplayTransformManager.java | 3 ++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/display/ColorDisplayService.java b/services/core/java/com/android/server/display/ColorDisplayService.java index af8ecadd3c975..ae7fd06df2de1 100644 --- a/services/core/java/com/android/server/display/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/ColorDisplayService.java @@ -231,7 +231,7 @@ public final class ColorDisplayService extends SystemService mController = new ColorDisplayController(getContext(), mCurrentUser); mController.setListener(this); - setCoefficientMatrix(getContext()); + setCoefficientMatrix(getContext(), DisplayTransformManager.isNativeModeEnabled()); // Prepare color transformation matrix. setMatrix(mController.getColorTemperature(), mMatrixNight); @@ -329,17 +329,24 @@ public final class ColorDisplayService extends SystemService } @Override - public void onDisplayColorModeChanged(int colorMode) { - final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); - dtm.setColorMode(colorMode); + public void onDisplayColorModeChanged(int mode) { + // Cancel the night display tint animator if it's running. + if (mColorMatrixAnimator != null) { + mColorMatrixAnimator.cancel(); + } - setCoefficientMatrix(getContext()); + setCoefficientMatrix(getContext(), mode == ColorDisplayController.COLOR_MODE_SATURATED); setMatrix(mController.getColorTemperature(), mMatrixNight); - applyTint(true); + + final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); + dtm.setColorMode(mode, mIsActivated ? mMatrixNight : MATRIX_IDENTITY); } - private void setCoefficientMatrix(Context context) { - final boolean isNative = DisplayTransformManager.isNativeModeEnabled(); + /** + * Set coefficients based on native mode. Use DisplayTransformManager#isNativeModeEnabled while + * setting is stable; when setting is changing, pass native mode selection directly. + */ + private void setCoefficientMatrix(Context context, boolean isNative) { final String[] coefficients = context.getResources().getStringArray(isNative ? R.array.config_nightDisplayColorTemperatureCoefficientsNative : R.array.config_nightDisplayColorTemperatureCoefficients); diff --git a/services/core/java/com/android/server/display/DisplayTransformManager.java b/services/core/java/com/android/server/display/DisplayTransformManager.java index 338e3311fe3bf..000fcf3e992b7 100644 --- a/services/core/java/com/android/server/display/DisplayTransformManager.java +++ b/services/core/java/com/android/server/display/DisplayTransformManager.java @@ -222,7 +222,7 @@ public class DisplayTransformManager { return SystemProperties.getBoolean(PERSISTENT_PROPERTY_NATIVE_MODE, false); } - public boolean setColorMode(int colorMode) { + public boolean setColorMode(int colorMode, float[] nightDisplayMatrix) { if (colorMode == ColorDisplayController.COLOR_MODE_NATURAL) { applySaturation(COLOR_SATURATION_NATURAL); setNativeMode(false); @@ -233,6 +233,7 @@ public class DisplayTransformManager { applySaturation(COLOR_SATURATION_NATURAL); setNativeMode(true); } + setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, nightDisplayMatrix); updateConfiguration();