package moontime.droid; import java.util.Calendar; import moontime.droid.InfiniteSlider.InfiniteAdapter; import moontime.droid.util.Util; import moontime.droid.util.YearMonthAdapterPositioning; import android.content.Context; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; public abstract class CalendarSliders { final InfiniteSlider _yearSlider; final InfiniteSlider _monthSlider; final Context _context; final InfiniteMonthAdapter _monthAdapter; final InfiniteYearAdapter _yearAdapter; final Calendar _currentDate; public CalendarSliders(Context context, InfiniteSlider yearSlider, InfiniteSlider monthSlider, Calendar initDate) { _currentDate = initDate; int initialYear = _currentDate.get(Calendar.YEAR); int initialMonth = _currentDate.get(Calendar.MONTH); YearMonthAdapterPositioning positioning = new YearMonthAdapterPositioning(initialYear, initialMonth, InfiniteAdapter.MID_POSITION, InfiniteAdapter.MID_POSITION); _context = context; _yearSlider = yearSlider; _monthSlider = monthSlider; _yearAdapter = new InfiniteYearAdapter(this, positioning); _yearSlider.init(_yearAdapter); _yearSlider.setCallbackDuringFling(false); _yearSlider.setOnItemSelectedListener(_yearAdapter); _yearSlider.setSelection(positioning.getCurrentYearPosition()); _monthAdapter = new InfiniteMonthAdapter(this, positioning); _monthSlider.init(_monthAdapter); _monthSlider.setCallbackDuringFling(false); _monthSlider.setOnItemSelectedListener(_monthAdapter); _monthSlider.setSelection(positioning.getCurrentMonthPosition()); } public Context getContext() { return _context; } public void onDateChange(YearMonthAdapterPositioning adapterPositioning) { Log.d("calendsr", adapterPositioning.getCurrentYear() + ", " + adapterPositioning.getCurrentMonth()); _yearSlider.setSelection(adapterPositioning.getCurrentYearPosition()); _monthSlider.setSelection(adapterPositioning.getCurrentMonthPosition()); _currentDate.set(Calendar.YEAR, adapterPositioning.getCurrentYear()); _currentDate.set(Calendar.MONTH, adapterPositioning.getCurrentMonth()); onDateChange(_currentDate); } protected abstract void onDateChange(Calendar date); static class InfiniteYearAdapter extends InfiniteAdapter implements OnItemSelectedListener { private final CalendarSliders _calendarSlider; private YearMonthAdapterPositioning _adapterPositioning; public InfiniteYearAdapter(CalendarSliders calendarSlider, YearMonthAdapterPositioning adapterPositioning) { super(calendarSlider.getContext()); _calendarSlider = calendarSlider; _adapterPositioning = adapterPositioning; } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { _adapterPositioning.setCurrentYearPosition(position); _calendarSlider.onDateChange(_adapterPositioning); } @Override public void onNothingSelected(AdapterView<?> parent) { // nothing todo } @Override public String getItem(int position) { return Integer.toString(_adapterPositioning.getYear(position)); } } static class InfiniteMonthAdapter extends InfiniteAdapter implements OnItemSelectedListener { private final YearMonthAdapterPositioning _adapterPositioning; private final CalendarSliders _calendarSlider; public InfiniteMonthAdapter(CalendarSliders calendarSlider, YearMonthAdapterPositioning adapterPositioning) { super(calendarSlider.getContext()); _calendarSlider = calendarSlider; _adapterPositioning = adapterPositioning; } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { _adapterPositioning.setCurrentMonthPosition(position); _calendarSlider.onDateChange(_adapterPositioning); } @Override public void onNothingSelected(AdapterView<?> parent) { // nothing todo } @Override public String getItem(int position) { int index = _adapterPositioning.getMonth(position); return Util.MONTH_SHORT_NAMES.get(index); } } }