package org.itsnat.droid.impl;
import android.app.Activity;
import android.app.Application;
import android.content.res.Configuration;
import android.content.res.Resources;
import org.itsnat.droid.InflateLayoutRequest;
import org.itsnat.droid.ItsNatDroid;
import org.itsnat.droid.ItsNatDroidBrowser;
import org.itsnat.droid.ItsNatDroidException;
import org.itsnat.droid.R;
import org.itsnat.droid.impl.browser.ItsNatDroidBrowserImpl;
import org.itsnat.droid.impl.domparser.XMLDOMRegistry;
import org.itsnat.droid.impl.xmlinflater.XMLInflaterRegistry;
import org.itsnat.droid.impl.xmlinflater.layout.stdalone.InflateLayoutRequestStandaloneImpl;
/**
* Created by jmarranz on 3/05/14.
*/
public class ItsNatDroidImpl implements ItsNatDroid
{
public static ItsNatDroidImpl DEFAULT;
protected Application app;
protected XMLInflaterRegistry xmlInflaterRegistry = new XMLInflaterRegistry(this); // Sólo creamos una instancia pues cuesta mucho instanciar los objetos procesadores de clases y atributos
protected XMLDOMRegistry xmlDOMRegistry = new XMLDOMRegistry(this);
public ItsNatDroidImpl(Application app)
{
this.app = app;
}
public static void init(Application app)
{
if (DEFAULT != null) throw new ItsNatDroidException("ItsNat Droid is already initialized");
DEFAULT = new ItsNatDroidImpl(app);
}
public Application getApplication()
{
return app;
}
@Override
public ItsNatDroidBrowser createItsNatDroidBrowser()
{
return new ItsNatDroidBrowserImpl(this);
}
@Override
public InflateLayoutRequest createInflateLayoutRequest()
{
// El modelo ItsNat está muy bien pero ofrecemos como alternativa que el propio programador se descargue sus layouts
// y los gestione a su manera
return new InflateLayoutRequestStandaloneImpl(this);
}
@Override
public String getVersionName()
{
Resources res = app.getApplicationContext().getResources();
return res.getString(R.string.itsNatDroidLibVersionName);
}
@Override
public int getVersionCode()
{
Resources res = app.getApplicationContext().getResources();
return res.getInteger(R.integer.itsNatDroidLibVersionCode);
}
public XMLInflaterRegistry getXMLInflaterRegistry()
{
return xmlInflaterRegistry;
}
public XMLDOMRegistry getXMLDOMRegistry()
{
return xmlDOMRegistry;
}
public void onConfigurationChanged(Activity activity, Configuration newConfig)
{
// Este método conviene ser llamado en onConfigurationChanged(Configuration newConfig) en la actividad de la app que usa la librería
// Llamando a cleanCaches de esta manera se recrean los DOMAttrDynamic en los cuales se aplican los filtros de nuevo de acuerdo con los cambios de configuración
getXMLDOMRegistry().cleanCaches();
}
}