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); + } }