Fixed
Status Update
Comments
nj...@google.com <nj...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit d0de70729f403e53893caf07bfc322ba7ffea655
Author: Nader Jawad <njawad@google.com>
Date: Mon Aug 09 13:29:05 2021
Add support for ColorStateList tint
properties
Relnote: "Updated Vector graphics xml
parsing to support ColorStateLists as
root color tint properties on VectorDrawables."
Fixes: 195668138
Test: Added tests to XmlVectorParserTest
Change-Id: I86915d08bdf50f729e91ec85c9f8595ad16f9562
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_color_resource_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_color_theme_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_csl_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_csl_tint_theme.xml
M compose/ui/ui/src/androidAndroidTest/res/values/themes.xml
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt
A compose/ui/ui/src/main/res/color/vector_tint_color.xml
A compose/ui/ui/src/main/res/color/vector_tint_theme_color.xml
https://android-review.googlesource.com/1790835
Branch: androidx-main
commit d0de70729f403e53893caf07bfc322ba7ffea655
Author: Nader Jawad <njawad@google.com>
Date: Mon Aug 09 13:29:05 2021
Add support for ColorStateList tint
properties
Relnote: "Updated Vector graphics xml
parsing to support ColorStateLists as
root color tint properties on VectorDrawables."
Fixes: 195668138
Test: Added tests to XmlVectorParserTest
Change-Id: I86915d08bdf50f729e91ec85c9f8595ad16f9562
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_color_resource_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_color_theme_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_csl_tint.xml
A compose/ui/ui/src/androidAndroidTest/res/drawable/ic_triangle_csl_tint_theme.xml
M compose/ui/ui/src/androidAndroidTest/res/values/themes.xml
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt
A compose/ui/ui/src/main/res/color/vector_tint_color.xml
A compose/ui/ui/src/main/res/color/vector_tint_theme_color.xml
Description
Current incorrect behavior
The link to source code ).
painterResource()
currently only supports inflatingandroid:tint
if it references a simpleCOLOR_INT
resource type, meaning thatColorStateList
s or theme attributes pointing toColorStateList
s are simply ignored (Desired correct behavior
android:tint
should inflate the color state list usingTypedArrayUtils#getNamedColor()
instead, which would default to theColorStateList
's default value (sinceCompose
does not have any understanding of drawable states used withView
s).This behavior would mirror the way that here , which returns a here ).
ColorStateList
s are currently handled in a<path>
'sandroid:fillColor
andandroid:strokeColor
, both of which fallback to theColorStateList
's default color (they inflate usingTypedArrayUtils#getNamedComplexColor()
ComplexColor
wrapper around aColorStateList
. Then when the vector is rendered to the display, a simpleSolidColor
using the color state list's default color is returnedThis would closely mirror the way that source code here ).
VectorDrawableCompat
is inflated, which usesTypedArrayUtils#getNamedColorStateList()
(Reasons for fixing the bug
android:fillColor
andandroid:strokeColor
currently support color state lists butandroid:tint
does not. Ideally they should both be supported if possible.Many teams adopting Compose don't have an Icon solution as elegant as Material's (which generates
ImageVector
s as part of a separate artifact automatically). For example, our team, plans to continue inflating icons from our existing icon library defined in XML resources while adopting Compose, and all of these resources currently declare a default tint color usingandroid:tint
.Version used: Compose v1.0.1