OSDN Git Service

Split display white balance into a separate helper
authorChristine Franks <christyfranks@google.com>
Fri, 8 Mar 2019 01:48:25 +0000 (17:48 -0800)
committerChristine Franks <christyfranks@google.com>
Tue, 26 Mar 2019 17:33:00 +0000 (10:33 -0700)
Bug: 124474236
Test: atest FrameworksServicesTests:DisplayWhiteBalanceTintControllerTest

Change-Id: I0a9ac371a2ea5af6bcbfa86fd264387bba281ffb

services/core/java/com/android/server/display/color/ColorDisplayService.java
services/core/java/com/android/server/display/color/DisplayWhiteBalanceTintController.java [new file with mode: 0644]
services/core/java/com/android/server/display/color/GlobalSaturationTintController.java
services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
services/tests/servicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java [new file with mode: 0644]

index 45505c7..4f81c03 100644 (file)
@@ -24,7 +24,6 @@ import static android.hardware.display.ColorDisplayManager.COLOR_MODE_BOOSTED;
 import static android.hardware.display.ColorDisplayManager.COLOR_MODE_NATURAL;
 import static android.hardware.display.ColorDisplayManager.COLOR_MODE_SATURATED;
 
-import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
 import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_NIGHT_DISPLAY;
 
 import android.Manifest;
@@ -45,7 +44,6 @@ import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.database.ContentObserver;
-import android.graphics.ColorSpace;
 import android.hardware.display.ColorDisplayManager;
 import android.hardware.display.ColorDisplayManager.AutoMode;
 import android.hardware.display.ColorDisplayManager.ColorMode;
@@ -55,7 +53,6 @@ import android.net.Uri;
 import android.opengl.Matrix;
 import android.os.Binder;
 import android.os.Handler;
-import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.SystemProperties;
@@ -65,7 +62,6 @@ import android.provider.Settings.System;
 import android.util.MathUtils;
 import android.util.Slog;
 import android.view.SurfaceControl;
-import android.view.SurfaceControl.DisplayPrimaries;
 import android.view.accessibility.AccessibilityManager;
 import android.view.animation.AnimationUtils;
 
@@ -98,7 +94,7 @@ public final class ColorDisplayService extends SystemService {
     /**
      * The identity matrix, used if one of the given matrices is {@code null}.
      */
-    private static final float[] MATRIX_IDENTITY = new float[16];
+    static final float[] MATRIX_IDENTITY = new float[16];
 
     static {
         Matrix.setIdentityM(MATRIX_IDENTITY, 0);
@@ -1187,245 +1183,6 @@ public final class ColorDisplayService extends SystemService {
         }
     }
 
-    final class DisplayWhiteBalanceTintController extends TintController {
-
-        // Three chromaticity coordinates per color: X, Y, and Z
-        private static final int NUM_VALUES_PER_PRIMARY = 3;
-        // Four colors: red, green, blue, and white
-        private static final int NUM_DISPLAY_PRIMARIES_VALS = 4 * NUM_VALUES_PER_PRIMARY;
-
-        private final Object mLock = new Object();
-        @VisibleForTesting
-        int mTemperatureMin;
-        @VisibleForTesting
-        int mTemperatureMax;
-        private int mTemperatureDefault;
-        private float[] mDisplayNominalWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
-        @VisibleForTesting
-        ColorSpace.Rgb mDisplayColorSpaceRGB;
-        private float[] mChromaticAdaptationMatrix;
-        @VisibleForTesting
-        int mCurrentColorTemperature;
-        private float[] mCurrentColorTemperatureXYZ;
-        private boolean mSetUp = false;
-        private float[] mMatrixDisplayWhiteBalance = new float[16];
-        private Boolean mIsAvailable;
-
-        @Override
-        public void setUp(Context context, boolean needsLinear) {
-            mSetUp = false;
-            final Resources res = context.getResources();
-
-            ColorSpace.Rgb displayColorSpaceRGB = getDisplayColorSpaceFromSurfaceControl();
-            if (displayColorSpaceRGB == null) {
-                Slog.w(TAG, "Failed to get display color space from SurfaceControl, trying res");
-                displayColorSpaceRGB = getDisplayColorSpaceFromResources(res);
-                if (displayColorSpaceRGB == null) {
-                    Slog.e(TAG, "Failed to get display color space from resources");
-                    return;
-                }
-            }
-
-            final String[] nominalWhiteValues = res.getStringArray(
-                    R.array.config_displayWhiteBalanceDisplayNominalWhite);
-            float[] displayNominalWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
-            for (int i = 0; i < nominalWhiteValues.length; i++) {
-                displayNominalWhiteXYZ[i] = Float.parseFloat(nominalWhiteValues[i]);
-            }
-
-            final int colorTemperatureMin = res.getInteger(
-                    R.integer.config_displayWhiteBalanceColorTemperatureMin);
-            if (colorTemperatureMin <= 0) {
-                Slog.e(TAG, "Display white balance minimum temperature must be greater than 0");
-                return;
-            }
-
-            final int colorTemperatureMax = res.getInteger(
-                    R.integer.config_displayWhiteBalanceColorTemperatureMax);
-            if (colorTemperatureMax < colorTemperatureMin) {
-                Slog.e(TAG, "Display white balance max temp must be greater or equal to min");
-                return;
-            }
-
-            final int colorTemperature = res.getInteger(
-                    R.integer.config_displayWhiteBalanceColorTemperatureDefault);
-
-            synchronized (mLock) {
-                mDisplayColorSpaceRGB = displayColorSpaceRGB;
-                mDisplayNominalWhiteXYZ = displayNominalWhiteXYZ;
-                mTemperatureMin = colorTemperatureMin;
-                mTemperatureMax = colorTemperatureMax;
-                mTemperatureDefault = colorTemperature;
-                mSetUp = true;
-            }
-
-            setMatrix(mTemperatureDefault);
-        }
-
-        @Override
-        public float[] getMatrix() {
-            return mSetUp && isActivated() ? mMatrixDisplayWhiteBalance : MATRIX_IDENTITY;
-        }
-
-        @Override
-        public void setMatrix(int cct) {
-            if (!mSetUp) {
-                Slog.w(TAG, "Can't set display white balance temperature: uninitialized");
-                return;
-            }
-
-            if (cct < mTemperatureMin) {
-                Slog.w(TAG, "Requested display color temperature is below allowed minimum");
-                cct = mTemperatureMin;
-            } else if (cct > mTemperatureMax) {
-                Slog.w(TAG, "Requested display color temperature is above allowed maximum");
-                cct = mTemperatureMax;
-            }
-
-            Slog.d(TAG, "setDisplayWhiteBalanceTemperatureMatrix: cct = " + cct);
-
-            synchronized (mLock) {
-                mCurrentColorTemperature = cct;
-
-                // Adapt the display's nominal white point to match the requested CCT value
-                mCurrentColorTemperatureXYZ = ColorSpace.cctToXyz(cct);
-
-                mChromaticAdaptationMatrix =
-                        ColorSpace.chromaticAdaptation(ColorSpace.Adaptation.BRADFORD,
-                                mDisplayNominalWhiteXYZ, mCurrentColorTemperatureXYZ);
-
-                // Convert the adaptation matrix to RGB space
-                float[] result = ColorSpace.mul3x3(mChromaticAdaptationMatrix,
-                        mDisplayColorSpaceRGB.getTransform());
-                result = ColorSpace.mul3x3(mDisplayColorSpaceRGB.getInverseTransform(), result);
-
-                // Normalize the transform matrix to peak white value in RGB space
-                final float adaptedMaxR = result[0] + result[3] + result[6];
-                final float adaptedMaxG = result[1] + result[4] + result[7];
-                final float adaptedMaxB = result[2] + result[5] + result[8];
-                final float denum = Math.max(Math.max(adaptedMaxR, adaptedMaxG), adaptedMaxB);
-                for (int i = 0; i < result.length; i++) {
-                    result[i] /= denum;
-                }
-
-                Matrix.setIdentityM(mMatrixDisplayWhiteBalance, 0);
-                java.lang.System.arraycopy(result, 0, mMatrixDisplayWhiteBalance, 0, 3);
-                java.lang.System.arraycopy(result, 3, mMatrixDisplayWhiteBalance, 4, 3);
-                java.lang.System.arraycopy(result, 6, mMatrixDisplayWhiteBalance, 8, 3);
-            }
-        }
-
-        @Override
-        public int getLevel() {
-            return LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
-        }
-
-        @Override
-        public boolean isAvailable(Context context) {
-            if (mIsAvailable == null) {
-                mIsAvailable = ColorDisplayManager.isDisplayWhiteBalanceAvailable(context);
-            }
-            return mIsAvailable;
-        }
-
-        /**
-         * Format a given matrix into a string.
-         *
-         * @param matrix the matrix to format
-         * @param cols number of columns in the matrix
-         */
-        private String matrixToString(float[] matrix, int cols) {
-            if (matrix == null || cols <= 0) {
-                Slog.e(TAG, "Invalid arguments when formatting matrix to string");
-                return "";
-            }
-
-            StringBuilder sb = new StringBuilder("");
-            for (int i = 0; i < matrix.length; i++) {
-                if (i % cols == 0) {
-                    sb.append("\n      ");
-                }
-                sb.append(String.format("%9.6f ", matrix[i]));
-            }
-            return sb.toString();
-        }
-
-        @Override
-        public void dump(PrintWriter pw) {
-            synchronized (mLock) {
-                pw.println("    mSetUp = " + mSetUp);
-                if (!mSetUp) {
-                    return;
-                }
-
-                pw.println("    mTemperatureMin = " + mTemperatureMin);
-                pw.println("    mTemperatureMax = " + mTemperatureMax);
-                pw.println("    mTemperatureDefault = " + mTemperatureDefault);
-                pw.println("    mCurrentColorTemperature = " + mCurrentColorTemperature);
-                pw.println("    mCurrentColorTemperatureXYZ = "
-                        + matrixToString(mCurrentColorTemperatureXYZ, 3));
-                pw.println("    mDisplayColorSpaceRGB RGB-to-XYZ = "
-                        + matrixToString(mDisplayColorSpaceRGB.getTransform(), 3));
-                pw.println("    mChromaticAdaptationMatrix = "
-                        + matrixToString(mChromaticAdaptationMatrix, 3));
-                pw.println("    mDisplayColorSpaceRGB XYZ-to-RGB = "
-                        + matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
-                pw.println("    mMatrixDisplayWhiteBalance = "
-                        + matrixToString(mMatrixDisplayWhiteBalance, 4));
-            }
-        }
-
-        private ColorSpace.Rgb makeRgbColorSpaceFromXYZ(float[] redGreenBlueXYZ, float[] whiteXYZ) {
-            return new ColorSpace.Rgb(
-                    "Display Color Space",
-                    redGreenBlueXYZ,
-                    whiteXYZ,
-                    2.2f // gamma, unused for display white balance
-            );
-        }
-
-        private ColorSpace.Rgb getDisplayColorSpaceFromSurfaceControl() {
-            final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
-            if (displayToken == null) {
-                return null;
-            }
-
-            DisplayPrimaries primaries = SurfaceControl.getDisplayNativePrimaries(displayToken);
-            if (primaries == null || primaries.red == null || primaries.green == null
-                    || primaries.blue == null || primaries.white == null) {
-                return null;
-            }
-
-            return makeRgbColorSpaceFromXYZ(
-                    new float[]{
-                            primaries.red.X, primaries.red.Y, primaries.red.Z,
-                            primaries.green.X, primaries.green.Y, primaries.green.Z,
-                            primaries.blue.X, primaries.blue.Y, primaries.blue.Z,
-                    },
-                    new float[]{primaries.white.X, primaries.white.Y, primaries.white.Z}
-            );
-        }
-
-        private ColorSpace.Rgb getDisplayColorSpaceFromResources(Resources res) {
-            final String[] displayPrimariesValues = res.getStringArray(
-                    R.array.config_displayWhiteBalanceDisplayPrimaries);
-            float[] displayRedGreenBlueXYZ =
-                    new float[NUM_DISPLAY_PRIMARIES_VALS - NUM_VALUES_PER_PRIMARY];
-            float[] displayWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
-
-            for (int i = 0; i < displayRedGreenBlueXYZ.length; i++) {
-                displayRedGreenBlueXYZ[i] = Float.parseFloat(displayPrimariesValues[i]);
-            }
-
-            for (int i = 0; i < displayWhiteXYZ.length; i++) {
-                displayWhiteXYZ[i] = Float.parseFloat(
-                        displayPrimariesValues[displayRedGreenBlueXYZ.length + i]);
-            }
-
-            return makeRgbColorSpaceFromXYZ(displayRedGreenBlueXYZ, displayWhiteXYZ);
-        }
-    }
-
     /**
      * Local service that allows color transforms to be enabled from other system services.
      */
diff --git a/services/core/java/com/android/server/display/color/DisplayWhiteBalanceTintController.java b/services/core/java/com/android/server/display/color/DisplayWhiteBalanceTintController.java
new file mode 100644 (file)
index 0000000..97c9c79
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display.color;
+
+import static com.android.server.display.color.DisplayTransformManager.LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.ColorSpace;
+import android.hardware.display.ColorDisplayManager;
+import android.opengl.Matrix;
+import android.os.IBinder;
+import android.util.Slog;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.DisplayPrimaries;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.PrintWriter;
+
+final class DisplayWhiteBalanceTintController extends TintController {
+
+    // Three chromaticity coordinates per color: X, Y, and Z
+    private static final int NUM_VALUES_PER_PRIMARY = 3;
+    // Four colors: red, green, blue, and white
+    private static final int NUM_DISPLAY_PRIMARIES_VALS = 4 * NUM_VALUES_PER_PRIMARY;
+
+    private final Object mLock = new Object();
+    @VisibleForTesting
+    int mTemperatureMin;
+    @VisibleForTesting
+    int mTemperatureMax;
+    private int mTemperatureDefault;
+    private float[] mDisplayNominalWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
+    @VisibleForTesting
+    ColorSpace.Rgb mDisplayColorSpaceRGB;
+    private float[] mChromaticAdaptationMatrix;
+    @VisibleForTesting
+    int mCurrentColorTemperature;
+    private float[] mCurrentColorTemperatureXYZ;
+    private boolean mSetUp = false;
+    private float[] mMatrixDisplayWhiteBalance = new float[16];
+    private Boolean mIsAvailable;
+
+    @Override
+    public void setUp(Context context, boolean needsLinear) {
+        mSetUp = false;
+        final Resources res = context.getResources();
+
+        ColorSpace.Rgb displayColorSpaceRGB = getDisplayColorSpaceFromSurfaceControl();
+        if (displayColorSpaceRGB == null) {
+            Slog.w(ColorDisplayService.TAG,
+                    "Failed to get display color space from SurfaceControl, trying res");
+            displayColorSpaceRGB = getDisplayColorSpaceFromResources(res);
+            if (displayColorSpaceRGB == null) {
+                Slog.e(ColorDisplayService.TAG, "Failed to get display color space from resources");
+                return;
+            }
+        }
+
+        final String[] nominalWhiteValues = res.getStringArray(
+                R.array.config_displayWhiteBalanceDisplayNominalWhite);
+        float[] displayNominalWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
+        for (int i = 0; i < nominalWhiteValues.length; i++) {
+            displayNominalWhiteXYZ[i] = Float.parseFloat(nominalWhiteValues[i]);
+        }
+
+        final int colorTemperatureMin = res.getInteger(
+                R.integer.config_displayWhiteBalanceColorTemperatureMin);
+        if (colorTemperatureMin <= 0) {
+            Slog.e(ColorDisplayService.TAG,
+                    "Display white balance minimum temperature must be greater than 0");
+            return;
+        }
+
+        final int colorTemperatureMax = res.getInteger(
+                R.integer.config_displayWhiteBalanceColorTemperatureMax);
+        if (colorTemperatureMax < colorTemperatureMin) {
+            Slog.e(ColorDisplayService.TAG,
+                    "Display white balance max temp must be greater or equal to min");
+            return;
+        }
+
+        final int colorTemperature = res.getInteger(
+                R.integer.config_displayWhiteBalanceColorTemperatureDefault);
+
+        synchronized (mLock) {
+            mDisplayColorSpaceRGB = displayColorSpaceRGB;
+            mDisplayNominalWhiteXYZ = displayNominalWhiteXYZ;
+            mTemperatureMin = colorTemperatureMin;
+            mTemperatureMax = colorTemperatureMax;
+            mTemperatureDefault = colorTemperature;
+            mSetUp = true;
+        }
+
+        setMatrix(mTemperatureDefault);
+    }
+
+    @Override
+    public float[] getMatrix() {
+        return mSetUp && isActivated() ? mMatrixDisplayWhiteBalance
+                : ColorDisplayService.MATRIX_IDENTITY;
+    }
+
+    @Override
+    public void setMatrix(int cct) {
+        if (!mSetUp) {
+            Slog.w(ColorDisplayService.TAG,
+                    "Can't set display white balance temperature: uninitialized");
+            return;
+        }
+
+        if (cct < mTemperatureMin) {
+            Slog.w(ColorDisplayService.TAG,
+                    "Requested display color temperature is below allowed minimum");
+            cct = mTemperatureMin;
+        } else if (cct > mTemperatureMax) {
+            Slog.w(ColorDisplayService.TAG,
+                    "Requested display color temperature is above allowed maximum");
+            cct = mTemperatureMax;
+        }
+
+        Slog.d(ColorDisplayService.TAG, "setDisplayWhiteBalanceTemperatureMatrix: cct = " + cct);
+
+        synchronized (mLock) {
+            mCurrentColorTemperature = cct;
+
+            // Adapt the display's nominal white point to match the requested CCT value
+            mCurrentColorTemperatureXYZ = ColorSpace.cctToXyz(cct);
+
+            mChromaticAdaptationMatrix =
+                    ColorSpace.chromaticAdaptation(ColorSpace.Adaptation.BRADFORD,
+                            mDisplayNominalWhiteXYZ, mCurrentColorTemperatureXYZ);
+
+            // Convert the adaptation matrix to RGB space
+            float[] result = ColorSpace.mul3x3(mChromaticAdaptationMatrix,
+                    mDisplayColorSpaceRGB.getTransform());
+            result = ColorSpace.mul3x3(mDisplayColorSpaceRGB.getInverseTransform(), result);
+
+            // Normalize the transform matrix to peak white value in RGB space
+            final float adaptedMaxR = result[0] + result[3] + result[6];
+            final float adaptedMaxG = result[1] + result[4] + result[7];
+            final float adaptedMaxB = result[2] + result[5] + result[8];
+            final float denum = Math.max(Math.max(adaptedMaxR, adaptedMaxG), adaptedMaxB);
+            for (int i = 0; i < result.length; i++) {
+                result[i] /= denum;
+            }
+
+            Matrix.setIdentityM(mMatrixDisplayWhiteBalance, 0);
+            java.lang.System.arraycopy(result, 0, mMatrixDisplayWhiteBalance, 0, 3);
+            java.lang.System.arraycopy(result, 3, mMatrixDisplayWhiteBalance, 4, 3);
+            java.lang.System.arraycopy(result, 6, mMatrixDisplayWhiteBalance, 8, 3);
+        }
+    }
+
+    @Override
+    public int getLevel() {
+        return LEVEL_COLOR_MATRIX_DISPLAY_WHITE_BALANCE;
+    }
+
+    @Override
+    public boolean isAvailable(Context context) {
+        if (mIsAvailable == null) {
+            mIsAvailable = ColorDisplayManager.isDisplayWhiteBalanceAvailable(context);
+        }
+        return mIsAvailable;
+    }
+
+    @Override
+    public void dump(PrintWriter pw) {
+        synchronized (mLock) {
+            pw.println("    mSetUp = " + mSetUp);
+            if (!mSetUp) {
+                return;
+            }
+
+            pw.println("    mTemperatureMin = " + mTemperatureMin);
+            pw.println("    mTemperatureMax = " + mTemperatureMax);
+            pw.println("    mTemperatureDefault = " + mTemperatureDefault);
+            pw.println("    mCurrentColorTemperature = " + mCurrentColorTemperature);
+            pw.println("    mCurrentColorTemperatureXYZ = "
+                    + matrixToString(mCurrentColorTemperatureXYZ, 3));
+            pw.println("    mDisplayColorSpaceRGB RGB-to-XYZ = "
+                    + matrixToString(mDisplayColorSpaceRGB.getTransform(), 3));
+            pw.println("    mChromaticAdaptationMatrix = "
+                    + matrixToString(mChromaticAdaptationMatrix, 3));
+            pw.println("    mDisplayColorSpaceRGB XYZ-to-RGB = "
+                    + matrixToString(mDisplayColorSpaceRGB.getInverseTransform(), 3));
+            pw.println("    mMatrixDisplayWhiteBalance = "
+                    + matrixToString(mMatrixDisplayWhiteBalance, 4));
+        }
+    }
+
+    /**
+     * Format a given matrix into a string.
+     *
+     * @param matrix the matrix to format
+     * @param columns number of columns in the matrix
+     */
+    private String matrixToString(float[] matrix, int columns) {
+        if (matrix == null || columns <= 0) {
+            Slog.e(ColorDisplayService.TAG, "Invalid arguments when formatting matrix to string");
+            return "";
+        }
+
+        final StringBuilder sb = new StringBuilder("");
+        for (int i = 0; i < matrix.length; i++) {
+            if (i % columns == 0) {
+                sb.append("\n      ");
+            }
+            sb.append(String.format("%9.6f", matrix[i]));
+        }
+        return sb.toString();
+    }
+
+    private ColorSpace.Rgb makeRgbColorSpaceFromXYZ(float[] redGreenBlueXYZ, float[] whiteXYZ) {
+        return new ColorSpace.Rgb(
+                "Display Color Space",
+                redGreenBlueXYZ,
+                whiteXYZ,
+                2.2f // gamma, unused for display white balance
+        );
+    }
+
+    private ColorSpace.Rgb getDisplayColorSpaceFromSurfaceControl() {
+        final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
+        if (displayToken == null) {
+            return null;
+        }
+
+        DisplayPrimaries primaries = SurfaceControl.getDisplayNativePrimaries(displayToken);
+        if (primaries == null || primaries.red == null || primaries.green == null
+                || primaries.blue == null || primaries.white == null) {
+            return null;
+        }
+
+        return makeRgbColorSpaceFromXYZ(
+                new float[]{
+                        primaries.red.X, primaries.red.Y, primaries.red.Z,
+                        primaries.green.X, primaries.green.Y, primaries.green.Z,
+                        primaries.blue.X, primaries.blue.Y, primaries.blue.Z,
+                },
+                new float[]{primaries.white.X, primaries.white.Y, primaries.white.Z}
+        );
+    }
+
+    private ColorSpace.Rgb getDisplayColorSpaceFromResources(Resources res) {
+        final String[] displayPrimariesValues = res.getStringArray(
+                R.array.config_displayWhiteBalanceDisplayPrimaries);
+        float[] displayRedGreenBlueXYZ =
+                new float[NUM_DISPLAY_PRIMARIES_VALS - NUM_VALUES_PER_PRIMARY];
+        float[] displayWhiteXYZ = new float[NUM_VALUES_PER_PRIMARY];
+
+        for (int i = 0; i < displayRedGreenBlueXYZ.length; i++) {
+            displayRedGreenBlueXYZ[i] = Float.parseFloat(displayPrimariesValues[i]);
+        }
+
+        for (int i = 0; i < displayWhiteXYZ.length; i++) {
+            displayWhiteXYZ[i] = Float.parseFloat(
+                    displayPrimariesValues[displayRedGreenBlueXYZ.length + i]);
+        }
+
+        return makeRgbColorSpaceFromXYZ(displayRedGreenBlueXYZ, displayWhiteXYZ);
+    }
+}
index 71fdcc7..a3d758d 100644 (file)
@@ -26,7 +26,7 @@ import android.util.Slog;
 import java.util.Arrays;
 
 /** Control the color transform for global device saturation. */
-public class GlobalSaturationTintController extends TintController {
+final class GlobalSaturationTintController extends TintController {
 
     private final float[] mMatrixGlobalSaturation = new float[16];
 
index 2f427b0..de841a0 100644 (file)
@@ -124,7 +124,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -133,7 +133,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOffBeforeNight_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -142,7 +142,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOffDuringNight_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -151,7 +151,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOffInFuture_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -160,7 +160,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOnAfterNight_turnsOn() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -169,7 +169,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOnBeforeNight_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -178,7 +178,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOnDuringNight_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -187,7 +187,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedAfterNight_ifOnInFuture_turnsOff() {
         setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -196,7 +196,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOffAfterNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -205,7 +205,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOffBeforeNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -214,7 +214,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOffDuringNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -223,7 +223,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOffInPast_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -232,7 +232,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOnAfterNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -241,7 +241,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOnBeforeNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -250,7 +250,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOnDuringNight_turnsOff() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -259,7 +259,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedBeforeNight_ifOnInPast_turnsOn() {
         setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -268,7 +268,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOffAfterNight_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -277,7 +277,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOffBeforeNight_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -286,7 +286,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOffDuringNightInFuture_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -295,7 +295,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOffDuringNightInPast_turnsOff() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -304,7 +304,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOnAfterNight_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -313,7 +313,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOnBeforeNight_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -322,7 +322,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOnDuringNightInFuture_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -331,7 +331,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void customSchedule_whenStartedDuringNight_ifOnDuringNightInPast_turnsOn() {
         setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -340,7 +340,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -349,7 +349,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOffBeforeNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -358,7 +358,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOffDuringNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -367,7 +367,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOffInFuture_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -376,7 +376,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOnAfterNight_turnsOn() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -385,7 +385,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOnBeforeNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -394,7 +394,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOnDuringNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -403,7 +403,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedAfterNight_ifOnInFuture_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -412,7 +412,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOffAfterNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -421,7 +421,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOffBeforeNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -430,7 +430,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOffDuringNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -439,7 +439,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOffInPast_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -448,7 +448,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOnAfterNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -457,7 +457,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOnBeforeNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -466,7 +466,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOnDuringNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -475,7 +475,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedBeforeNight_ifOnInPast_turnsOn() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -484,7 +484,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOffAfterNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -493,7 +493,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOffBeforeNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -502,7 +502,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOffDuringNightInFuture_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -511,7 +511,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOffDuringNightInPast_turnsOff() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(false /* activated */);
@@ -520,7 +520,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOnAfterNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -529,7 +529,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOnBeforeNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -538,7 +538,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOnDuringNightInFuture_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -547,7 +547,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenStartedDuringNight_ifOnDuringNightInPast_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         startService();
         assertActivated(true /* activated */);
@@ -556,7 +556,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOffAfterNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -571,7 +571,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOffBeforeNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -180 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -586,7 +586,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOffDuringNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -601,7 +601,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOffInFuture_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -616,7 +616,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOnAfterNight_turnsOn() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -631,7 +631,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOnBeforeNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -180 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -646,7 +646,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOnDuringNight_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -661,7 +661,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedAfterNight_ifOnInFuture_turnsOff() {
         setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -676,7 +676,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOffAfterNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 180 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -691,7 +691,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOffBeforeNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -706,7 +706,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOffDuringNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -721,7 +721,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOffInPast_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -736,7 +736,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOnAfterNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 180 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -751,7 +751,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOnBeforeNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -766,7 +766,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOnDuringNight_turnsOff() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -781,7 +781,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedBeforeNight_ifOnInPast_turnsOn() {
         setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -796,7 +796,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOffAfterNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -811,7 +811,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOffBeforeNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -826,7 +826,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOffDuringNightInFuture_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -841,7 +841,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOffDuringNightInPast_turnsOff() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -856,7 +856,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOnAfterNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -871,7 +871,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOnBeforeNight_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -90 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -886,7 +886,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOnDuringNightInFuture_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, 30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -901,7 +901,7 @@ public class ColorDisplayServiceTest {
     @Test
     public void twilightSchedule_whenRebootedDuringNight_ifOnDuringNightInPast_turnsOn() {
         setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         final TwilightState state = mTwilightManager.getLastTwilightState();
         mTwilightManager.setTwilightState(null);
@@ -984,22 +984,19 @@ public class ColorDisplayServiceTest {
     }
 
     @Test
-    public void displayWhiteBalance_enable() {
-        setWhiteBalance(true /* Enable DWB Setting */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+    public void displayWhiteBalance_enabled() {
+        setDisplayWhiteBalanceEnabled(true);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
         mBinderService.setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
         startService();
         assertDwbActive(true);
     }
 
     @Test
-    public void displayWhiteBalance_disableAfterNightDisplayEnable() {
-        setWhiteBalance(true /* Enable DWB Setting */);
-
+    public void displayWhiteBalance_disabledAfterNightDisplayEnabled() {
+        setDisplayWhiteBalanceEnabled(true);
         startService();
-        /* Enable nightlight */
-        setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         /* Since we are using FakeSettingsProvider which could not trigger observer change,
          * force an update here.*/
@@ -1008,26 +1005,23 @@ public class ColorDisplayServiceTest {
     }
 
     @Test
-    public void displayWhiteBalance_enableAfterNightDisplayDisable() {
-        setWhiteBalance(true /* Enable DWB Setting */);
+    public void displayWhiteBalance_enabledAfterNightDisplayDisabled() {
+        setDisplayWhiteBalanceEnabled(true);
         startService();
-        /* Enable nightlight */
-        setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */);
-        setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(true /* activated */, -30 /* lastActivatedTimeOffset */);
 
         mCds.updateDisplayWhiteBalanceStatus();
         assertDwbActive(false);
 
-        /* Disable nightlight */
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
         mCds.updateDisplayWhiteBalanceStatus();
         assertDwbActive(true);
     }
 
     @Test
-    public void displayWhiteBalance_enableAfterLinearColorMode() {
-        setWhiteBalance(true /* Enable DWB Setting */);
-        setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
+    public void displayWhiteBalance_enabledAfterLinearColorModeSelected() {
+        setDisplayWhiteBalanceEnabled(true);
+        setNightDisplayActivated(false /* activated */, -30 /* lastActivatedTimeOffset */);
         startService();
         mBinderService.setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
 
@@ -1035,47 +1029,6 @@ public class ColorDisplayServiceTest {
         assertDwbActive(true);
     }
 
-    @Test
-    public void displayWhiteBalance_setTemperatureOverMax() {
-        int max = mCds.mDisplayWhiteBalanceTintController.mTemperatureMax;
-
-        ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
-                ColorDisplayService.ColorDisplayServiceInternal.class);
-        cdsInternal.setDisplayWhiteBalanceColorTemperature(max + 1);
-
-        assertWithMessage("Unexpected temperature set")
-                .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
-                .isEqualTo(max);
-    }
-
-    @Test
-    public void displayWhiteBalance_setTemperatureBelowMin() {
-        int min = mCds.mDisplayWhiteBalanceTintController.mTemperatureMin;
-
-        ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
-                ColorDisplayService.ColorDisplayServiceInternal.class);
-        cdsInternal.setDisplayWhiteBalanceColorTemperature(min - 1);
-
-        assertWithMessage("Unexpected temperature set")
-                .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
-                .isEqualTo(min);
-    }
-
-    @Test
-    public void displayWhiteBalance_setValidTemperature() {
-        int min = mCds.mDisplayWhiteBalanceTintController.mTemperatureMin;
-        int max = mCds.mDisplayWhiteBalanceTintController.mTemperatureMax;
-        int valToSet = (min + max) / 2;
-
-        ColorDisplayService.ColorDisplayServiceInternal cdsInternal = LocalServices.getService(
-                ColorDisplayService.ColorDisplayServiceInternal.class);
-        cdsInternal.setDisplayWhiteBalanceColorTemperature(valToSet);
-
-        assertWithMessage("Unexpected temperature set")
-                .that(mCds.mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
-                .isEqualTo(valToSet);
-    }
-
     /**
      * Configures Night display to use a custom schedule.
      *
@@ -1109,7 +1062,7 @@ public class ColorDisplayServiceTest {
      * @param lastActivatedTimeOffset the offset relative to now to record that Night display was
      * activated (in minutes)
      */
-    private void setActivated(boolean activated, int lastActivatedTimeOffset) {
+    private void setNightDisplayActivated(boolean activated, int lastActivatedTimeOffset) {
         mBinderService.setNightDisplayActivated(activated);
         Secure.putStringForUser(mContext.getContentResolver(),
                 Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
@@ -1140,11 +1093,11 @@ public class ColorDisplayServiceTest {
     /**
      * Configures the Display White Balance setting state.
      *
-     * @param state {@code true} if display white balance should be enabled
+     * @param enabled {@code true} if display white balance should be enabled
      */
-    private void setWhiteBalance(boolean state) {
+    private void setDisplayWhiteBalanceEnabled(boolean enabled) {
         Secure.putIntForUser(mContext.getContentResolver(),
-                Secure.DISPLAY_WHITE_BALANCE_ENABLED, state ? 1 : 0, mUserId);
+                Secure.DISPLAY_WHITE_BALANCE_ENABLED, enabled ? 1 : 0, mUserId);
     }
 
     /**
diff --git a/services/tests/servicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java b/services/tests/servicestests/src/com/android/server/display/color/DisplayWhiteBalanceTintControllerTest.java
new file mode 100644 (file)
index 0000000..1dd4e15
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display.color;
+
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class DisplayWhiteBalanceTintControllerTest {
+
+    private DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController;
+
+    @Before
+    public void setUp() {
+        mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController();
+    }
+
+    @Test
+    public void displayWhiteBalance_setTemperatureOverMax() {
+        final int max = mDisplayWhiteBalanceTintController.mTemperatureMax;
+        mDisplayWhiteBalanceTintController.setMatrix(max + 1);
+        assertWithMessage("Unexpected temperature set")
+                .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+                .isEqualTo(max);
+    }
+
+    @Test
+    public void displayWhiteBalance_setTemperatureBelowMin() {
+        final int min = mDisplayWhiteBalanceTintController.mTemperatureMin;
+        mDisplayWhiteBalanceTintController.setMatrix(min - 1);
+        assertWithMessage("Unexpected temperature set")
+                .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+                .isEqualTo(min);
+    }
+
+    @Test
+    public void displayWhiteBalance_setValidTemperature() {
+        final int colorTemperature = (mDisplayWhiteBalanceTintController.mTemperatureMin
+                + mDisplayWhiteBalanceTintController.mTemperatureMax) / 2;
+        mDisplayWhiteBalanceTintController.setMatrix(colorTemperature);
+
+        assertWithMessage("Unexpected temperature set")
+                .that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
+                .isEqualTo(colorTemperature);
+    }
+
+}