From 4e94d2d0b4acbf30d780aae6d0d46b4923853f2c Mon Sep 17 00:00:00 2001 From: James O'Leary Date: Wed, 28 Apr 2021 15:44:14 -0400 Subject: [PATCH] Connect ColorStateList to CAM ColorStateList recently added an attribute, lStar, that means the color should have its perceptual luminance adjusted. The color appearance model library transforms the given color to one with the desired luminance. Test: added new test to ColorStateListTest, ran atest locally, tests passed. (no link, atest/my build is broken, can't upload results) Bug: 186640057 Change-Id: I5252b7c03d76ec1f0a7ca97cd671e8ea63d4b88b --- .../android/content/res/ColorStateList.java | 6 +++--- .../coretests/res/color/color_with_lstar.xml | 20 +++++++++++++++++++ core/tests/coretests/res/values/colors.xml | 1 + .../android/graphics/ColorStateListTest.java | 6 ++++++ 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 core/tests/coretests/res/color/color_with_lstar.xml diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index 45b956bd7c5d4..5b727cc47d47e 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -35,6 +35,7 @@ import android.util.Xml; import com.android.internal.R; import com.android.internal.graphics.ColorUtils; +import com.android.internal.graphics.cam.Cam; import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; @@ -555,9 +556,8 @@ public class ColorStateList extends ComplexColor implements Parcelable { final int alpha = MathUtils.constrain((int) (baseAlpha * alphaMod + 0.5f), 0, 255); if (validLStar) { - final double[] labColor = new double[3]; - ColorUtils.colorToLAB(baseColor, labColor); - baseColor = ColorUtils.LABToColor(lStar, labColor[1], labColor[2]); + final Cam baseCam = ColorUtils.colorToCAM(baseColor); + baseColor = ColorUtils.CAMToColor(baseCam.getHue(), baseCam.getChroma(), lStar); } return (baseColor & 0xFFFFFF) | (alpha << 24); diff --git a/core/tests/coretests/res/color/color_with_lstar.xml b/core/tests/coretests/res/color/color_with_lstar.xml new file mode 100644 index 0000000000000..dcc3d6db1b0a5 --- /dev/null +++ b/core/tests/coretests/res/color/color_with_lstar.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/core/tests/coretests/res/values/colors.xml b/core/tests/coretests/res/values/colors.xml index f01af8421515a..029aa0dd8eb68 100644 --- a/core/tests/coretests/res/values/colors.xml +++ b/core/tests/coretests/res/values/colors.xml @@ -25,5 +25,6 @@ #ffffff00 #ff00ff00 #ffff0000 + #fff00000 #ff0000ff diff --git a/core/tests/coretests/src/android/graphics/ColorStateListTest.java b/core/tests/coretests/src/android/graphics/ColorStateListTest.java index 1d34f93838181..a3d52eab16828 100644 --- a/core/tests/coretests/src/android/graphics/ColorStateListTest.java +++ b/core/tests/coretests/src/android/graphics/ColorStateListTest.java @@ -67,4 +67,10 @@ public class ColorStateListTest extends AndroidTestCase { int defaultColor = mResources.getColor(R.color.color_no_default); assertEquals(mResources.getColor(R.color.testcolor1), defaultColor); } + + @SmallTest + public void testLstar() throws Exception { + int defaultColor = mResources.getColor(R.color.color_with_lstar); + assertEquals(mResources.getColor(R.color.testcolor3), defaultColor); + } }