package org.itsnat.droid.impl.xmlinflater.layout.stdalone; import android.content.Context; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import org.itsnat.droid.AttrResourceInflaterListener; import org.itsnat.droid.InflateLayoutRequest; import org.itsnat.droid.InflatedLayout; import org.itsnat.droid.impl.ItsNatDroidImpl; import org.itsnat.droid.impl.dom.ParsedResourceXMLDOM; import org.itsnat.droid.impl.dom.layout.XMLDOMLayout; import org.itsnat.droid.impl.domparser.XMLDOMParserContext; import org.itsnat.droid.impl.domparser.XMLDOMRegistry; import org.itsnat.droid.impl.domparser.layout.XMLDOMLayoutParser; import org.itsnat.droid.impl.util.IOUtil; import java.io.InputStream; import java.io.Reader; /** * Created by jmarranz on 5/06/14. */ public class InflateLayoutRequestStandaloneImpl implements InflateLayoutRequest { protected ItsNatDroidImpl itsNatDroid; protected Context ctx; protected String encoding = "UTF-8"; protected int bitmapDensityReference = DisplayMetrics.DENSITY_XHIGH; // 320 (xhdpi), por ej el Nexus 4 protected AttrResourceInflaterListener attrResourcesInflaterListener; public InflateLayoutRequestStandaloneImpl(ItsNatDroidImpl itsNatDroid) { this.itsNatDroid = itsNatDroid; } @Override public InflateLayoutRequest setContext(Context ctx) { this.ctx = ctx; return this; } @Override public InflateLayoutRequest setEncoding(String encoding) { this.encoding = encoding; return this; } public String getEncoding() { return encoding; } @Override public InflateLayoutRequest setBitmapDensityReference(int bitmapDensityReference) { this.bitmapDensityReference = bitmapDensityReference; return this; } public int getBitmapDensityReference() { return bitmapDensityReference; } public ItsNatDroidImpl getItsNatDroidImpl() { return itsNatDroid; } public AttrResourceInflaterListener getAttrResourceInflaterListener() { return attrResourcesInflaterListener; } @Override public InflateLayoutRequest setAttrResourceInflaterListener(AttrResourceInflaterListener attrResourcesInflaterListener) { this.attrResourcesInflaterListener = attrResourcesInflaterListener; return this; } public Context getContext() { return ctx; } @Override public InflatedLayout inflate(InputStream input,ViewGroup parentView) { String markup = IOUtil.read(input,encoding); XMLInflaterLayoutStandalone xmlInflaterLayoutStandalone = inflateLayoutStandalone(markup,parentView); return xmlInflaterLayoutStandalone.getInflatedXMLLayoutStandaloneImpl(); } @Override public InflatedLayout inflate(Reader input,ViewGroup parentView) { String markup = IOUtil.read(input); XMLInflaterLayoutStandalone xmlInflaterLayoutStandalone = inflateLayoutStandalone(markup,parentView); return xmlInflaterLayoutStandalone.getInflatedXMLLayoutStandaloneImpl(); } private XMLInflaterLayoutStandalone inflateLayoutStandalone(String markup,ViewGroup parentView) { Context ctx = getContext(); XMLDOMRegistry xmlDOMRegistry = getItsNatDroidImpl().getXMLDOMRegistry(); XMLDOMParserContext xmlDOMParserContext = new XMLDOMParserContext(xmlDOMRegistry,ctx); ParsedResourceXMLDOM<XMLDOMLayout> resourceXMLDOM = xmlDOMRegistry.buildXMLDOMLayoutAndCachingByMarkupAndResDesc(markup,null, null, XMLDOMLayoutParser.LayoutType.STANDALONE, xmlDOMParserContext); XMLDOMLayout xmlDOMLayout = resourceXMLDOM.getXMLDOM(); int indexChild = parentView != null ? parentView.getChildCount() - 1 : -1; XMLInflaterLayoutStandalone xmlInflater = (XMLInflaterLayoutStandalone)XMLInflaterLayoutStandalone.createXMLInflaterLayout(getItsNatDroidImpl(),xmlDOMLayout,getBitmapDensityReference(),getAttrResourceInflaterListener(),ctx,null); View rootViewOrViewParent = xmlInflater.inflateLayout(parentView,indexChild); return xmlInflater; } }