package org.itsnat.droid.impl.xmlinflater.layout.classtree;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.SlidingDrawer;
import org.itsnat.droid.R;
import org.itsnat.droid.impl.xmlinflater.MethodContainer;
import org.itsnat.droid.impl.xmlinflater.layout.ClassDescViewMgr;
import org.itsnat.droid.impl.xmlinflater.layout.PendingPostInsertChildrenTasks;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_SlidingDrawer_orientation;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecFieldSetBoolean;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecFieldSetDimensionIntFloor;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecFieldSetId;
/**
* Created by jmarranz on 30/04/14.
*/
public class ClassDescView_widget_SlidingDrawer extends ClassDescViewBased
{
protected MethodContainer<Void> methodOnFinishInflate;
public ClassDescView_widget_SlidingDrawer(ClassDescViewMgr classMgr, ClassDescView_view_ViewGroup parentClass)
{
super(classMgr,"android.widget.SlidingDrawer",parentClass);
this.methodOnFinishInflate = new MethodContainer<Void>(View.class,"onFinishInflate"); // Existe el método onFinishInflate en SlidingDrawer class
}
@Override
protected View createViewObject(int idStyle,PendingPostInsertChildrenTasks pendingPostInsertChildrenTasks,Context ctx)
{
final SlidingDrawer view;
// En tiempo de creación del componente deben estar definidos los atributos id "content" y "handle" sino da error
// por ello suministramos unos por defecto cuyos ids existen en Resources aunque luego los cambiemos
AttributeSet attrSetDefault = readAttributeSetLayout(ctx,R.layout.slidingdrawer_default);
if (idStyle != 0)
{
view = new SlidingDrawer(new ContextThemeWrapper(ctx,idStyle),attrSetDefault,0 /*idStyle */);
}
else
{
// Es importante llamar a estos constructores y no pasar un idStyle con 0 pues Spinner define un style por defecto en el constructor que es "mandatory" si no especificamos uno explícitamente
view = new SlidingDrawer(ctx,attrSetDefault); // El constructor de un sólo param también vale
}
if (pendingPostInsertChildrenTasks != null)
{
pendingPostInsertChildrenTasks.addTask(new Runnable()
{
@Override
public void run()
{
// Se nota que SlidingDrawer está abandonado porque no funciona creado programáticamente, necesita ser ejecutado el método
// OnFinishInflate manualmente (por tanto parseado desde XML nativo compilado) para que se definan el content y el handle
// Los View hijos content y handle deben estar ya añadidos por eso usamos PendingPostInsertChildrenTasks
methodOnFinishInflate.invoke(view);
}
});
}
return view;
}
@SuppressWarnings("unchecked")
protected void init()
{
super.init();
addAttrDescAN(new AttrDescReflecFieldSetBoolean(this, "allowSingleTap", "mAllowSingleTap", true));
addAttrDescAN(new AttrDescReflecFieldSetBoolean(this, "animateOnClick", "mAnimateOnClick", true));
addAttrDescAN(new AttrDescReflecFieldSetDimensionIntFloor(this, "bottomOffset", "mBottomOffset", 0));
addAttrDescAN(new AttrDescReflecFieldSetId(this, "content", "mContentId", -1)); // SlidingDrawer sólo admite referenciar un TextView hijo del <SlidingDrawer>, getLayout() no vale
addAttrDescAN(new AttrDescReflecFieldSetId(this, "handle", "mHandleId", -1)); // SlidingDrawer sólo admite referenciar un TextView hijo del <SlidingDrawer>, getLayout() no vale
addAttrDescAN(new AttrDescView_widget_SlidingDrawer_orientation(this));
addAttrDescAN(new AttrDescReflecFieldSetDimensionIntFloor(this, "topOffset", "mTopOffset", 0));
}
}