From 82cafe6e94e5eaf1cc7c22090615dce3e0a9e430 Mon Sep 17 00:00:00 2001 From: nitram84 <58364572+nitram84@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:50:10 +0200 Subject: [PATCH] fix(res): support `min` attr for attrs (PR #1909) --- .../main/java/jadx/core/xmlgen/ResXmlGen.java | 19 +++++++++++++---- .../java/jadx/core/xmlgen/ResXmlGenTest.java | 21 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java index dcf43c876..befdc4d95 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java @@ -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("'); } } diff --git a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java index 1e3cb0e46..3c44f88c1 100644 --- a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java +++ b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java @@ -79,6 +79,27 @@ class ResXmlGenTest { + "", 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 files = resXmlGen.makeResourcesXml(); + + assertEquals(1, files.size()); + assertEquals("res/values/attrs.xml", files.get(0).getFileName()); + assertEquals("\n" + + "\n" + + " \n" + + " \n" + + "", files.get(0).getText().toString()); + } + @Test void testStyle() { ResourceStorage resStorage = new ResourceStorage();