package edu.mit.mitmobile2.events; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import edu.mit.mitmobile2.FullScreenLoader; import edu.mit.mitmobile2.MITMenuItem; import edu.mit.mitmobile2.MITPopupSecondaryTitleBar; import edu.mit.mitmobile2.MITSliderTitleBar; import edu.mit.mitmobile2.MITSliderTitleBar.OnPreviousNextListener; import edu.mit.mitmobile2.MobileWebApi; import edu.mit.mitmobile2.NewModule; import edu.mit.mitmobile2.NewModuleActivity; import edu.mit.mitmobile2.OnMITMenuItemListener; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.SimpleArrayAdapter; import edu.mit.mitmobile2.SliderView; import edu.mit.mitmobile2.SliderView.ScreenPosition; import edu.mit.mitmobile2.events.EventDayListSliderAdapter.OnDayChangeListener; import edu.mit.mitmobile2.events.EventMonthAcademicCalendarListSliderAdapter.OnMonthChangeListener; import edu.mit.mitmobile2.events.EventsModel.EventType; import edu.mit.mitmobile2.objs.EventCategoryItem; import edu.mit.mitmobile2.objs.EventDetailsItem; public class EventsTopActivity extends NewModuleActivity implements OnMITMenuItemListener { private Context mContext; private FullScreenLoader mLoader; private MITPopupSecondaryTitleBar mSecondaryTitleBar; private long mCurrentTimestamp; private MITSliderTitleBar mSecondarySliderBar; @Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); mContext = this; mSecondaryTitleBar = new MITPopupSecondaryTitleBar(this); mSecondaryTitleBar.setOnPopupMenuItemListener(this); mSecondarySliderBar = new MITSliderTitleBar(this); initContentView(); mLoader = new FullScreenLoader(this, null); mLoader.showLoading(); setContentView(mLoader, true); mCurrentTimestamp = System.currentTimeMillis() / 1000; EventsModel.fetchEventTypes(this, new Handler() { boolean mTypesLoaded = false; @Override public void handleMessage(Message msg) { mLoader.stopLoading(); if(msg.arg1 == MobileWebApi.SUCCESS && !mTypesLoaded) { setContentView(new View(mContext), false); getTitleBar().addSecondaryBar(mSecondaryTitleBar); for(final EventType eventType : EventsModel.getEventTypes()) { mSecondaryTitleBar.addPopupMenuItem(new MITMenuItem(eventType.getTypeId(), eventType.getLongName())); } if (EventsModel.getEventTypes().size() > 0) { EventsTopActivity.this.onOptionItemSelected(EventsModel.getEventTypes().get(0).getTypeId()); } mSecondaryTitleBar.addPopupMenuItem(new MITMenuItem("Browse_Categories", "Browse Events by Category")); mSecondaryTitleBar.addPopupMenuItem(new MITMenuItem("Academic_Calendar", "Academic Calendar")); mSecondaryTitleBar.addPopupMenuItem(new MITMenuItem("Holidays_Calendar", "Holidays")); mTypesLoaded = true; } else if(msg.arg1 == MobileWebApi.ERROR) { mLoader.showError(); } } }); } @Override protected NewModule getNewModule() { return new EventsModule(); } @Override public boolean isModuleHomeActivity() { return true; } @Override protected boolean isScrollable() { return false; } @Override protected void onOptionSelected(String optionId) { } @Override public void onOptionItemSelected(String optionId) { getTitleBar().removeSliderBar(); EventType eventType = EventsModel.getEventType(optionId); if (eventType != null) { loadEvents(eventType); } else if (optionId.equals("Academic_Calendar")) { loadAcademicCalendar(); } else if (optionId.equals("Browse_Categories")) { loadBrowseCategoriesView(); } else if (optionId.equals("Holidays_Calendar")) { loadHolidays(); } } private void loadEvents(EventType eventType) { getTitleBar().addSliderBar(mSecondarySliderBar); final SliderView sliderView = new SliderView(mContext); sliderView.setAdapter(new EventDayListSliderAdapter(this, eventType, mCurrentTimestamp, new OnDayChangeListener() { @Override public void onDayChangeListener(String previous,String current, String next) { mSecondarySliderBar.showPreviousNext(); mSecondarySliderBar.setAllTitles(previous, current, next); } } )); mSecondarySliderBar.setPreviousNextListener(new OnPreviousNextListener() { @Override public void onPreviousClicked() { sliderView.slideLeft(); } @Override public void onNextClicked() { sliderView.slideRight(); } }); setContentView(sliderView, false); } private void loadAcademicCalendar() { getTitleBar().addSliderBar(mSecondarySliderBar); final SliderView sliderView = new SliderView(mContext); sliderView.setAdapter(new EventMonthAcademicCalendarListSliderAdapter(this, mCurrentTimestamp, new OnMonthChangeListener() { @Override public void onMonthChange(EventMonthAcademicCalendarListSliderAdapter adapter) { mSecondarySliderBar.showPreviousNext(); mSecondarySliderBar.setAllTitles( adapter.monthTitle(ScreenPosition.Previous, false), adapter.monthTitle(ScreenPosition.Current, true), adapter.monthTitle(ScreenPosition.Next, false)); } } )); mSecondarySliderBar.setPreviousNextListener(new OnPreviousNextListener() { @Override public void onPreviousClicked() { sliderView.slideLeft(); } @Override public void onNextClicked() { sliderView.slideRight(); } }); setContentView(sliderView, false); } private void loadBrowseCategoriesView() { setContentView(mLoader, false); mLoader.showLoading(); if (EventsModel.categoriesAvailable()) { EventsModel.fetchCategories(this, handleCategories()); } else { // activity will need to gracefully exist finish(); return; } } private Handler handleCategories() { return new Handler() { @Override public void handleMessage(Message message) { mLoader.stopLoading(); if(message.arg1 == MobileWebApi.SUCCESS) { List<EventCategoryItem> categories = EventsModel.getCategories(); loadCategories(categories); } else { mLoader.showError(); } } }; } private void loadCategories(List<EventCategoryItem> categories) { ListView listView = new ListView(this); SimpleArrayAdapter<EventCategoryItem> adapter = new EventCategoryArrayAdapter(mContext, categories, null); adapter.setOnItemClickListener(listView, new SimpleArrayAdapter.OnItemClickListener<EventCategoryItem>() { @Override public void onItemSelected(EventCategoryItem item) { if (item.subcats == null) { MITEventsDaysSliderActivity.launchCategory(mContext, item.catid, item.name, "Events", null); } else { Intent intent = new Intent(mContext, EventsCategoryActivity.class); intent.putExtra(EventsCategoryActivity.CATEGORY_ID_KEY, item.catid); mContext.startActivity(intent); } } } ); listView.setAdapter(adapter); setContentView(listView, false); } private void loadHolidays() { setContentView(mLoader, false); mLoader.showLoading(); EventsModel.fetchHolidays(this, new Handler() { @Override public void handleMessage(Message message) { if(message.arg1 == MobileWebApi.SUCCESS) { List<EventDetailsItem> events = EventsModel.getHolidays(); ListAdapter listAdapter = new EventsArrayAdapter(mContext, R.layout.events_row, 0, events, EventDetailsItem.SHORT_DAYS_ONLY); ListView listView = new ListView(mContext); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> listView, View view, int position, long arg3) { EventDetailsItem eventDetails = (EventDetailsItem) listView.getItemAtPosition(position); MITEventsSliderActivity.launchHolidaysCalendar(mContext, eventDetails.id); } }); listView.setAdapter(listAdapter); setContentView(listView, false); } else { mLoader.showError(); } } }); } }