Search in sources :

Example 6 with ProtoValue

use of jadx.core.xmlgen.entry.ProtoValue in project jadx by skylot.

the class ResXmlGen method addValue.

private void addValue(ICodeWriter cw, ResourceEntry ri) {
    if (ri.getProtoValue() != null) {
        ProtoValue protoValue = ri.getProtoValue();
        if (protoValue.getValue() != null && protoValue.getNamedValues() == null) {
            addSimpleValue(cw, ri.getTypeName(), ri.getTypeName(), "name", ri.getKeyName(), protoValue.getValue());
        } else {
            cw.startLine();
            cw.add('<').add(ri.getTypeName()).add(' ');
            String itemTag = "item";
            cw.add("name=\"").add(ri.getKeyName()).add('\"');
            if (ri.getTypeName().equals("attr") && protoValue.getValue() != null) {
                cw.add(" format=\"").add(protoValue.getValue()).add('\"');
            }
            if (protoValue.getParent() != null) {
                cw.add(" parent=\"").add(protoValue.getParent()).add('\"');
            }
            cw.add(">");
            cw.incIndent();
            for (ProtoValue value : protoValue.getNamedValues()) {
                addProtoItem(cw, itemTag, ri.getTypeName(), value);
            }
            cw.decIndent();
            cw.startLine().add("</").add(ri.getTypeName()).add('>');
        }
    } else if (ri.getSimpleValue() != null) {
        String valueStr = vp.decodeValue(ri.getSimpleValue());
        addSimpleValue(cw, ri.getTypeName(), ri.getTypeName(), "name", ri.getKeyName(), valueStr);
    } else {
        cw.startLine();
        cw.add('<').add(ri.getTypeName()).add(' ');
        String itemTag = "item";
        if (ri.getTypeName().equals("attr") && !ri.getNamedValues().isEmpty()) {
            cw.add("name=\"").add(ri.getKeyName());
            int type = ri.getNamedValues().get(0).getRawValue().getData();
            if ((type & ValuesParser.ATTR_TYPE_ENUM) != 0) {
                itemTag = "enum";
            } else if ((type & ValuesParser.ATTR_TYPE_FLAGS) != 0) {
                itemTag = "flag";
            }
            String formatValue = XmlGenUtils.getAttrTypeAsString(type);
            if (formatValue != null) {
                cw.add("\" format=\"").add(formatValue);
            }
            cw.add("\"");
        } else {
            cw.add("name=\"").add(ri.getKeyName()).add('\"');
        }
        if (ri.getParentRef() != 0) {
            String parent = vp.decodeValue(TYPE_REFERENCE, ri.getParentRef());
            cw.add(" parent=\"").add(parent).add('\"');
        }
        cw.add(">");
        cw.incIndent();
        for (RawNamedValue value : ri.getNamedValues()) {
            addItem(cw, itemTag, ri.getTypeName(), value);
        }
        cw.decIndent();
        cw.startLine().add("</").add(ri.getTypeName()).add('>');
    }
}
Also used : RawNamedValue(jadx.core.xmlgen.entry.RawNamedValue) ProtoValue(jadx.core.xmlgen.entry.ProtoValue)

Aggregations

ProtoValue (jadx.core.xmlgen.entry.ProtoValue)6 ArrayList (java.util.ArrayList)4 Array (com.android.aapt.Resources.Array)1 Attribute (com.android.aapt.Resources.Attribute)1 ConfigValue (com.android.aapt.Resources.ConfigValue)1 Entry (com.android.aapt.Resources.Entry)1 Plural (com.android.aapt.Resources.Plural)1 Styleable (com.android.aapt.Resources.Styleable)1 Type (com.android.aapt.Resources.Type)1 RawNamedValue (jadx.core.xmlgen.entry.RawNamedValue)1 ResourceEntry (jadx.core.xmlgen.entry.ResourceEntry)1