public ResResSpec getResSpec(String name) throws AndrolibException { ResResSpec spec = getResSpecUnsafe(name); if (spec == null) { throw new UndefinedResObject(String.format("resource spec: %s/%s", getName(), name)); } return spec; }
public void addResSpec(ResResSpec spec) throws AndrolibException { if (mResSpecs.put(spec.getName(), spec) != null) { throw new AndrolibException(String.format("Multiple res specs: %s/%s", getName(), spec.getName())); } }
public String getFullName(boolean excludePackage, boolean excludeType) { return (excludePackage ? "" : getPackage().getName() + ":") + (excludeType ? "" : getType().getName() + "/") + getName(); }
public String getFilePath() { return mResSpec.getType().getName() + mConfig.getFlags().getQualifiers() + "/" + mResSpec.getName(); }
public ResBagValue bagFactory(int parent, Duo<Integer, ResScalarValue>[] items, ResTypeSpec resTypeSpec) throws AndrolibException { ResReferenceValue parentVal = newReference(parent, null); if (items.length == 0) { return new ResBagValue(parentVal); } int key = items[0].m1; if (key == ResAttr.BAG_KEY_ATTR_TYPE) { return ResAttr.factory(parentVal, items, this, mPackage); } String resTypeName = resTypeSpec.getName(); // Android O Preview added an unknown enum for c. This is hardcoded as 0 for now. if (ResTypeSpec.RES_TYPE_NAME_ARRAY.equals(resTypeName) || key == ResArrayValue.BAG_KEY_ARRAY_START || key == 0) { return new ResArrayValue(parentVal, items); } if (ResTypeSpec.RES_TYPE_NAME_PLURALS.equals(resTypeName) || (key >= ResPluralsValue.BAG_KEY_PLURALS_START && key <= ResPluralsValue.BAG_KEY_PLURALS_END)) { return new ResPluralsValue(parentVal, items); } if (ResTypeSpec.RES_TYPE_NAME_STYLES.equals(resTypeName)) { return new ResStyleValue(parentVal, items, this); } throw new AndrolibException("unsupported res type name for bags. Found: " + resTypeName); }
String inFileName = fileValue.getStrippedPath(); String outResName = res.getFilePath(); String typeName = res.getResSpec().getType().getName();
@Override public void serializeToResValuesXml(XmlSerializer serializer, ResResource res) throws IOException, AndrolibException { String type = res.getResSpec().getType().getName(); boolean item = !"reference".equals(mType) && !type.equals(mType);
@Override protected String encodeAsResXml() throws AndrolibException { if (isNull()) { return "@null"; } ResResSpec spec = getReferent(); if (spec == null) { return "@null"; } boolean newId = spec.hasDefaultResource() && spec.getDefaultResource().getValue() instanceof ResIdValue; // generate the beginning to fix @android String mStart = (mTheme ? '?' : '@') + (newId ? "+" : ""); return mStart + spec.getFullName(mPackage, mTheme && spec.getType().getName().equals("attr")); }
@Override public void serializeToResValuesXml(XmlSerializer serializer, ResResource res) throws IOException, AndrolibException { serializer.startTag(null, "item"); serializer .attribute(null, "type", res.getResSpec().getType().getName()); serializer.attribute(null, "name", res.getResSpec().getName()); serializer.endTag(null, "item"); } }
@Override public void serializeToResValuesXml(XmlSerializer serializer, ResResource res) throws IOException, AndrolibException { String type = res.getResSpec().getType().getName(); if ("style".equals(type)) { new ResStyleValue(mParent, new Duo[0], null) .serializeToResValuesXml(serializer, res); return; } if ("array".equals(type)) { new ResArrayValue(mParent, new Duo[0]).serializeToResValuesXml( serializer, res); return; } if ("plurals".equals(type)) { new ResPluralsValue(mParent, new Duo[0]).serializeToResValuesXml( serializer, res); return; } serializer.startTag(null, "item"); serializer.attribute(null, "type", type); serializer.attribute(null, "name", res.getResSpec().getName()); serializer.endTag(null, "item"); }
private void generatePublicXml(ResPackage pkg, Directory out, XmlSerializer serial) throws AndrolibException { try { OutputStream outStream = out.getFileOutput("values/public.xml"); serial.setOutput(outStream, null); serial.startDocument(null, null); serial.startTag(null, "resources"); for (ResResSpec spec : pkg.listResSpecs()) { serial.startTag(null, "public"); serial.attribute(null, "type", spec.getType().getName()); serial.attribute(null, "name", spec.getName()); serial.attribute(null, "id", String.format("0x%08x", spec.getId().id)); serial.endTag(null, "public"); } serial.endTag(null, "resources"); serial.endDocument(); serial.flush(); outStream.close(); } catch (IOException | DirectoryException ex) { throw new AndrolibException("Could not generate public.xml file", ex); } }