AssetManager: load style with parser.getAttribute(null, "style")

This way, we get the type as well and can check for it being an
attribute properly.
This commit is contained in:
Julian Winkler
2024-04-09 07:05:23 +02:00
parent 3d9eb9611f
commit ce6b83ad81

View File

@@ -765,20 +765,20 @@ public final class AssetManager {
int defStyleAttr, int defStyleRes, AttributeSet set, int defStyleAttr, int defStyleRes, AttributeSet set,
int[] inAttrs, int[] outValues, int[] outIndices) { int[] inAttrs, int[] outValues, int[] outIndices) {
TypedValue value = new TypedValue(); TypedValue value = new TypedValue();
ResXmlPullParser parser = (ResXmlPullParser)set;
if (defStyleRes == 0 && theme != 0 && loadThemeAttributeValue(theme, defStyleAttr, value, true) >= 0) if (defStyleRes == 0 && theme != 0 && loadThemeAttributeValue(theme, defStyleAttr, value, true) >= 0)
defStyleRes = value.data; defStyleRes = value.data;
if (defStyleRes == 0 && set != null) { if (defStyleRes == 0 && set != null) {
int styleVal = set.getAttributeResourceValue(null, "style", 0); ValueItem valueItem = parser.getAttribute(null, "style");
if(((styleVal >> 16) & 0xff) == 0x3) { // attribute if (valueItem != null) {
if (theme != 0 && loadThemeAttributeValue(theme, styleVal, value, true) >= 0) value.type = valueItem.getType();
defStyleRes = value.data; value.data = valueItem.getData();
} if (theme != 0 && (value.type == TypedValue.TYPE_ATTRIBUTE))
else { loadThemeAttributeValue(theme, value.data, value, true);
defStyleRes = styleVal; defStyleRes = value.data;
} }
} }
ResXmlPullParser parser = (ResXmlPullParser)set;
outIndices[0] = 0; outIndices[0] = 0;
Map<Integer,Integer> xmlCache = new HashMap<>(); Map<Integer,Integer> xmlCache = new HashMap<>();