package org.itsnat.droid.impl.xmlinflater.layout.classtree;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CalendarView;
import org.itsnat.droid.impl.xmlinflater.layout.ClassDescViewMgr;
import org.itsnat.droid.impl.xmlinflater.layout.PendingViewPostCreateProcess;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_CalendarView_dateTextAppearance;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_CalendarView_maxDate_minDate;
import org.itsnat.droid.impl.xmlinflater.layout.attr.widget.AttrDescView_widget_CalendarView_weekDayTextAppearance;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodBoolean;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodColor;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodDrawable;
import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodInt;
import java.util.Calendar;
import java.util.Locale;
/**
* Created by jmarranz on 30/04/14.
*/
public class ClassDescView_widget_CalendarView extends ClassDescViewBased
{
public ClassDescView_widget_CalendarView(ClassDescViewMgr classMgr,ClassDescView_widget_FrameLayout parentClass)
{
super(classMgr,"android.widget.CalendarView",parentClass);
}
@Override
public PendingViewPostCreateProcess createPendingViewPostCreateProcess(final View view, ViewGroup viewParent)
{
PendingViewPostCreateProcess pendingViewPostCreateProcess = super.createPendingViewPostCreateProcess(view, viewParent);
pendingViewPostCreateProcess.addPendingSetAttribsTask(new Runnable()
{
@Override
public void run()
{
// Esto es raro de narices pero es un workaround de un buggy de CalendarView al crearse programáticamente
// o bien es por nuestra "culpa" al aplicar los atributos en un orden incorrecto, el caso es que la semana
// actual no se selecciona, llamando a calendarView.setDate(System.currentTimeMillis()) no reacciona
// pero sí lo hace si cambiamos mucho la fecha
CalendarView calView = (CalendarView) view;
long current = System.currentTimeMillis();
calView.setDate(current - 7 * 24 * 60 * 60 * 1000);
calView.setDate(current);
//calView.setDate(current,true,true);
}
});
return pendingViewPostCreateProcess;
}
@SuppressWarnings("unchecked")
protected void init()
{
super.init();
addAttrDescAN(new AttrDescView_widget_CalendarView_dateTextAppearance(this));
addAttrDescAN(new AttrDescReflecMethodInt(this, "firstDayOfWeek", Calendar.getInstance(Locale.getDefault()).getFirstDayOfWeek())); // El valor por defecto no es exactamente así pero es razonable
// Desde level 16 existe el método setFocusedMonthDateColor. En lollipop (level 21) ya no hay mFocusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodColor(this, "focusedMonthDateColor", "setFocusedMonthDateColor", 0));
addAttrDescAN(new AttrDescView_widget_CalendarView_maxDate_minDate(this, "maxDate"));
addAttrDescAN(new AttrDescView_widget_CalendarView_maxDate_minDate(this, "minDate"));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodDrawable(this, "selectedDateVerticalBar", "setSelectedDateVerticalBar", "@null"));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodColor(this, "selectedWeekBackgroundColor", "setSelectedWeekBackgroundColor", 0));
addAttrDescAN(new AttrDescReflecMethodBoolean(this, "showWeekNumber", true));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodInt(this, "shownWeekCount", "setShownWeekCount", 6));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodColor(this, "unfocusedMonthDateColor", "setUnfocusedMonthDateColor", 0));
addAttrDescAN(new AttrDescView_widget_CalendarView_weekDayTextAppearance(this));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodColor(this, "weekNumberColor", "setWeekNumberColor", 0));
// Ver notas de focusedMonthDateColor
addAttrDescAN(new AttrDescReflecMethodColor(this, "weekSeparatorLineColor", "setWeekSeparatorLineColor", 0));
}
}