package edu.mit.mitmobile2.events; import java.util.List; import android.content.Context; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import edu.mit.mitmobile2.FullScreenLoader; import edu.mit.mitmobile2.LockingScrollView; import edu.mit.mitmobile2.MobileWebApi; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.SliderInterface; import edu.mit.mitmobile2.events.EventsModel.EventType; import edu.mit.mitmobile2.objs.EventDetailsItem; import edu.mit.mitmobile2.objs.EventDetailsItem.TimeSummaryMode; public class EventsListSliderInterface implements SliderInterface { TextView mDayEventsEmpty; ListView mDayListView; FullScreenLoader mLoadingView; private long mDayTime = -1; private Context mContext; private EventType mEventType = null; private int mCategoryId = -1; private boolean mAcademicCalendar = false; private int mMonth = -1; private int mYear = -1; private boolean mLoadingCompleted = false; private EventsListSliderInterface() { } /* * Look up events or exhibits by day (constructor) */ public static EventsListSliderInterface daysFactory(Context context, EventType eventType, long dayTime) { EventsListSliderInterface sliderInterface = new EventsListSliderInterface(); sliderInterface.mContext = context; sliderInterface.mDayTime = dayTime; sliderInterface.mEventType = eventType; return sliderInterface; } /* * Look up by category and day (constructor) */ public static EventsListSliderInterface categoriesFactory(Context context, int categoryId, EventType eventType, long dayTime) { EventsListSliderInterface sliderInterface = new EventsListSliderInterface(); sliderInterface.mContext = context; sliderInterface.mDayTime = dayTime; sliderInterface.mCategoryId = categoryId; sliderInterface.mEventType = eventType; return sliderInterface; } /* * Look up events from academic calendar */ public static EventsListSliderInterface academicCalendarFactory(Context context, int year, int month) { EventsListSliderInterface sliderInterface = new EventsListSliderInterface(); sliderInterface.mContext = context; sliderInterface.mYear = year; sliderInterface.mMonth = month; sliderInterface.mAcademicCalendar = true; return sliderInterface; } @Override public View getView() { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.events_day_list, null); mDayEventsEmpty = (TextView) view.findViewById(R.id.eventsDayListEmptyTV); mLoadingView = (FullScreenLoader) view.findViewById(R.id.eventsDayListLoader); mDayListView = (ListView) view.findViewById(R.id.eventsDayList); mDayListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View row, int position, long arg3) { EventDetailsItem event = (EventDetailsItem) adapterView.getItemAtPosition(position); if(mCategoryId > -1) { MITEventsSliderActivity.launchCategory(mContext, event.id, mDayTime, mCategoryId, mEventType); } else if(mAcademicCalendar) { MITEventsSliderActivity.launchAcademicCalendar(mContext, event.id, mYear, mMonth); } else { MITEventsSliderActivity.launchEvents(mContext, event.id, mDayTime, mEventType); } } }); return view; } @Override public void onSelected() { // when selected need to download events for the day if(mLoadingCompleted) { // exit early return; } mLoadingView.setVisibility(View.VISIBLE); mLoadingView.showLoading(); if(mAcademicCalendar) { EventsModel.fetchAcademicCalendar(mYear, mMonth, mContext, uiHandler()); } else if(mCategoryId > -1) { EventsModel.fetchCategoryDayEvents(mDayTime, mCategoryId, mEventType, mContext, uiHandler()); } else { EventsModel.fetchDayEvents(mDayTime, mEventType, mContext, uiHandler()); } } private Handler uiHandler() { return new Handler() { @Override public void handleMessage(Message message) { if(message.arg1 == MobileWebApi.SUCCESS) { mLoadingCompleted = true; List<EventDetailsItem> events = null; if(mCategoryId > -1) { events = EventsModel.getCategoryDayEvents(mDayTime, mCategoryId, mEventType); } else if(mAcademicCalendar) { events = EventsModel.getAcademicCalendar(mYear, mMonth); } else { events = EventsModel.getDayEvents(mDayTime, mEventType); } TimeSummaryMode timeSummaryMode = mAcademicCalendar ? EventDetailsItem.SHORT_DAYS_ONLY : EventDetailsItem.TIMES_ONLY; EventsArrayAdapter arrayAdapter = new EventsArrayAdapter(mContext, R.layout.events_row, 0, events, timeSummaryMode); mLoadingView.setVisibility(View.GONE); if(events.size() > 0 ) { mDayListView.setVisibility(View.VISIBLE); mDayListView.setAdapter(arrayAdapter); } else { mDayEventsEmpty.setVisibility(View.VISIBLE); } } else { mLoadingView.showError(); } } }; } @Override public void updateView() { // TODO Auto-generated method stub } @Override public LockingScrollView getVerticalScrollView() { return null; } @Override public void onDestroy() { // TODO Auto-generated method stub } }