package moontime.droid; import java.text.DateFormat; import java.text.DateFormatSymbols; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Iterator; import java.util.List; import moontime.MoonEvent; import moontime.MoonEventType; import moontime.MoonUtil; import moontime.droid.CalendarView.OnDayClickListener; import moontime.droid.service.MoontimeService; import moontime.droid.util.Util; import roboguice.activity.RoboActivity; import roboguice.inject.InjectExtra; import roboguice.inject.InjectView; import android.appwidget.AppWidgetManager; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import com.google.inject.Inject; public class CalendarActivity extends RoboActivity { @Inject protected MoontimeService _moontimeService; protected final Calendar _selectedYearMonth = MoonUtil.newCalender(0); private DateFormat _datePattern = new SimpleDateFormat("dd - HH:mm"); @InjectExtra(AppWidgetManager.EXTRA_APPWIDGET_ID) protected int _widgetId; @InjectView(R.id.calendar_calendarView) private CalendarView _calendarView; @InjectView(R.id.calendar_text_moons) private TextView _moonsText; @InjectView(R.id.calendar_text_selectedDay) private TextView _selectedDayText; @InjectView(R.id.calendar_year_slider) private InfiniteSlider _yearSlider; @InjectView(R.id.calendar_month_slider) private InfiniteSlider _monthSlider; public CalendarSliders _calendarSlider; private List<MoonEvent> _moonEvents; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.calendar_layout); _calendarView.setOnDayClickListener(new OnDayClickListener() { @Override public void onClick(TextView view, int day) { String month = new DateFormatSymbols().getMonths()[_selectedYearMonth.get(Calendar.MONTH)]; _selectedDayText.setText(day + " " + month + " :"); } }); _calendarSlider = createCalendarSlider(MoonUtil.newCalender(System.currentTimeMillis())); } private CalendarSliders createCalendarSlider(Calendar date) { return new CalendarSliders(this, _yearSlider, _monthSlider, date) { @Override protected void onDateChange(Calendar newDate) { Log.d("calendar", "onDateChange: " + _selectedYearMonth.getTime() + " / " + newDate.getTime()); if (Util.equalsInFields(newDate, _selectedYearMonth, Calendar.YEAR, Calendar.MONTH)) { return; } Util.copyFields(newDate, _selectedYearMonth, Calendar.YEAR, Calendar.MONTH); _calendarView.update(_selectedYearMonth); _selectedDayText.setText(""); _moonEvents = _moontimeService.getNextMoonEvents(_selectedYearMonth.getTimeInMillis(), 3); StringBuilder builder = new StringBuilder(); for (Iterator<MoonEvent> iterator = _moonEvents.iterator(); iterator.hasNext();) { MoonEvent moonEvent = (MoonEvent) iterator.next(); if (moonEvent.getDate().getMonth() == _selectedYearMonth.get(Calendar.MONTH)) { TextView dayView = _calendarView.getDayView(moonEvent.getDate().getDate()); dayView.setBackgroundResource(R.color.calendar_event_day_background); String eventName; if (moonEvent.getType() == MoonEventType.FULL_MOON) { eventName = moonEvent.getType().getDisplayName() + ": "; dayView.setText(dayView.getText() + " / FM"); } else { eventName = moonEvent.getType().getDisplayName() + ": "; dayView.setText(dayView.getText() + " / NM"); } builder.append(eventName + _datePattern.format(moonEvent.getDate())); builder.append("\n"); } } _moonsText.setText(builder); } }; } public void setCurrentDate(Calendar calendar) { _calendarSlider = createCalendarSlider(calendar); } @Override protected void onResume() { setTitle("Calendar"); super.onResume(); } }