fix(res): support min attr for attrs (PR #1909)

This commit is contained in:
nitram84
2023-06-12 15:50:10 +02:00
committed by GitHub
parent b578479270
commit 82cafe6e94
2 changed files with 36 additions and 4 deletions
@@ -108,6 +108,7 @@ public class ResXmlGen {
String valueStr = vp.decodeValue(ri.getSimpleValue());
addSimpleValue(cw, ri.getTypeName(), ri.getTypeName(), "name", ri.getKeyName(), valueStr);
} else {
boolean skipNamedValues = false;
cw.startLine();
cw.add('<').add(ri.getTypeName()).add(" name=\"");
String itemTag = "item";
@@ -123,6 +124,14 @@ public class ResXmlGen {
if (formatValue != null) {
cw.add("\" format=\"").add(formatValue);
}
if (ri.getNamedValues().size() > 1) {
for (RawNamedValue rv : ri.getNamedValues()) {
if (rv.getNameRef() == ParserConstants.ATTR_MIN) {
cw.add("\" min=\"").add(String.valueOf(rv.getRawValue().getData()));
skipNamedValues = true;
}
}
}
} else {
cw.add(ri.getKeyName());
}
@@ -135,11 +144,13 @@ public class ResXmlGen {
}
cw.add("\">");
cw.incIndent();
for (RawNamedValue value : ri.getNamedValues()) {
addItem(cw, itemTag, ri.getTypeName(), value);
if (!skipNamedValues) {
cw.incIndent();
for (RawNamedValue value : ri.getNamedValues()) {
addItem(cw, itemTag, ri.getTypeName(), value);
}
cw.decIndent();
}
cw.decIndent();
cw.startLine().add("</").add(ri.getTypeName()).add('>');
}
}
@@ -79,6 +79,27 @@ class ResXmlGenTest {
+ "</resources>", files.get(0).getText().toString());
}
@Test
void testAttrMin() {
ResourceStorage resStorage = new ResourceStorage();
ResourceEntry re = new ResourceEntry(2130903103, "jadx.gui.app", "attr", "size", "");
re.setNamedValues(
Lists.list(new RawNamedValue(16777216, new RawValue(16, 4)), new RawNamedValue(16777217, new RawValue(16, 1))));
resStorage.add(re);
ValuesParser vp = new ValuesParser(null, resStorage.getResourcesNames());
ResXmlGen resXmlGen = new ResXmlGen(resStorage, vp);
List<ResContainer> files = resXmlGen.makeResourcesXml();
assertEquals(1, files.size());
assertEquals("res/values/attrs.xml", files.get(0).getFileName());
assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ "<resources>\n"
+ " <attr name=\"size\" format=\"integer\" min=\"1\">\n"
+ " </attr>\n"
+ "</resources>", files.get(0).getText().toString());
}
@Test
void testStyle() {
ResourceStorage resStorage = new ResourceStorage();