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