ResEnumAttr: added support for many enum names with same int value.

This commit is contained in:
Ryszard Wiśniewski 2010-06-14 11:16:06 +02:00
parent a85eff1aef
commit db439f2b8c

View File

@ -34,11 +34,7 @@ public class ResEnumAttr extends ResAttr {
ResEnumAttr(ResReferenceValue parent, int type, Integer min, Integer max,
Boolean l10n, Duo<ResReferenceValue, ResIntValue>[] items) {
super(parent, type, min, max, l10n);
mItems = new LinkedHashMap<Integer, ResReferenceValue>();
for (int i = 0; i < items.length; i++) {
mItems.put(items[i].m2.getValue(), items[i].m1);
}
mItems = items;
}
@Override
@ -56,9 +52,11 @@ public class ResEnumAttr extends ResAttr {
@Override
protected void serializeBody(XmlSerializer serializer, ResResource res)
throws AndrolibException, IOException {
for (int intVal : mItems.keySet()) {
for (Duo<ResReferenceValue, ResIntValue> duo : mItems) {
int intVal = duo.m2.getValue();
serializer.startTag(null, "enum");
serializer.attribute(null, "name", decodeValue(intVal));
serializer.attribute(null, "name", duo.m1.getReferent().getName());
serializer.attribute(null, "value", String.valueOf(intVal));
serializer.endTag(null, "enum");
}
@ -67,7 +65,13 @@ public class ResEnumAttr extends ResAttr {
private String decodeValue(int value) throws AndrolibException {
String value2 = mItemsCache.get(value);
if (value2 == null) {
ResReferenceValue ref = mItems.get(value);
ResReferenceValue ref = null;
for (Duo<ResReferenceValue, ResIntValue> duo : mItems) {
if (duo.m2.getValue() == value) {
ref = duo.m1;
break;
}
}
if (ref != null) {
value2 = ref.getReferent().getName();
mItemsCache.put(value, value2);
@ -77,7 +81,7 @@ public class ResEnumAttr extends ResAttr {
}
private final Map<Integer, ResReferenceValue> mItems;
private final Duo<ResReferenceValue, ResIntValue>[] mItems;
private final Map<Integer, String> mItemsCache =
new HashMap<Integer, String>();
}