package edu.mit.mitmobile2.dining; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import android.content.Context; import android.view.View; import edu.mit.mitmobile2.SliderView; import edu.mit.mitmobile2.SliderView.ScreenPosition; import edu.mit.mitmobile2.dining.DiningMealIterator.MealOrEmptyDay; import edu.mit.mitmobile2.dining.DiningModel.HouseDiningHall; public abstract class DiningHouseAbstractSliderAdapter implements SliderView.Adapter { abstract protected View viewForMealOrDay(MealOrEmptyDay mealOrDay); private DiningMealIterator mMealIterator; private String mCurrentDateString; private String mTomorrowDateString; private String mYesterdayDateString; private DateFormat mFormat; private Date mCurrentDate; public DiningHouseAbstractSliderAdapter(Context context) { long currentTime = DiningModel.currentTimeMillis(); mCurrentDate = new Date(currentTime); mFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.US); mFormat.setCalendar(new GregorianCalendar()); mCurrentDateString = mFormat.format(mCurrentDate); Calendar tomorrow = new GregorianCalendar(); tomorrow.setTime(mCurrentDate); tomorrow.add(Calendar.DATE, 1); mTomorrowDateString = mFormat.format(tomorrow.getTime()); Calendar yesterday = new GregorianCalendar(); yesterday.setTime(mCurrentDate); yesterday.add(Calendar.DATE, -1); mYesterdayDateString = mFormat.format(yesterday.getTime()); } protected void setMealIterator(DiningMealIterator mealIterator) { mMealIterator = mealIterator; } public Calendar getSelectedDate(HouseDiningHall house) { MealOrEmptyDay mealOrEmptyDay = mMealIterator.getCurrent(); return mealOrEmptyDay.getDay(house); } public CharSequence getCurrentTitle() { MealOrEmptyDay mealOrEmptyDay = mMealIterator.getCurrent(); SimpleDateFormat dayNameFormat = new SimpleDateFormat("EEEE", Locale.US); SimpleDateFormat dateFormat = new SimpleDateFormat("LLLL d", Locale.US); Calendar day = mealOrEmptyDay.getDay(); String dateString = mFormat.format(day.getTime()); String dayName = dayNameFormat.format(day.getTime()); // check for today/tomorrow/yesterday if (mCurrentDateString.equals(dateString)) { dayName = "Today"; } else if (mTomorrowDateString.equals(dateString)) { dayName = "Tomorrow"; } else if (mYesterdayDateString.equals(dateString)) { dayName = "Yesterday"; } if (!mealOrEmptyDay.isEmpty()) { String title = dateFormat.format(day.getTime()); String mealName = mealOrEmptyDay.getCapitalizedMealName(); title = mealName + ", " + title; return dayName + "'s " + title; } else { return dayName + ", " + dateFormat.format(day.getTime()); } } @Override public void destroyScreen(ScreenPosition screenPosition) { } @Override public void seek(ScreenPosition screenPosition) { switch (screenPosition) { case Previous: mMealIterator.moveToPrevious(); break; case Next: mMealIterator.moveToNext(); break; case Current: // nothing to do break; } } @Override public boolean hasScreen(ScreenPosition screenPosition) { switch (screenPosition) { case Previous: return mMealIterator.hasPrevious(); case Current: return true; case Next: return mMealIterator.hasNext(); } return false; } @Override public View getScreen(ScreenPosition screenPosition) { MealOrEmptyDay mealOrEmptyDay = null; switch (screenPosition) { case Previous: mealOrEmptyDay = mMealIterator.getPrevious(); break; case Current: mealOrEmptyDay = mMealIterator.getCurrent(); break; case Next: mealOrEmptyDay = mMealIterator.getNext(); break; } return viewForMealOrDay(mealOrEmptyDay); } @Override public void destroy() { } }