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.Menu;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.Module;
import edu.mit.mitmobile2.ModuleActivity;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.SimpleArrayAdapter;
import edu.mit.mitmobile2.TitleBar;
import edu.mit.mitmobile2.TwoLineActionRow;
import edu.mit.mitmobile2.events.EventsModel.EventType;
import edu.mit.mitmobile2.objs.EventCategoryItem;
public class EventsSimpleCategoryActivity extends ModuleActivity {
private Context mContext;
private ListView mListView;
private FullScreenLoader mLoadingView;
private TitleBar mTitleBar;
private String mSourceId;
private EventType mEventType;
private String mSourceName;
final static String SOURCE_ID_KEY = "source_id";
public static void launch(Context context, String eventTypeId) {
Intent intent = new Intent(context, EventsSimpleCategoryActivity.class);
intent.putExtra(SOURCE_ID_KEY, eventTypeId);
context.startActivity(intent);
}
public static void launch(Context context, EventType type) {
launch(context, type.getTypeId());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.events_categories);
Bundle extras = getIntent().getExtras();
mSourceId = extras.getString(SOURCE_ID_KEY);
mListView = (ListView) findViewById(R.id.eventsCategoryLV);
mLoadingView = (FullScreenLoader) findViewById(R.id.eventsCategoriesLoading);
mContext = this;
mLoadingView.showLoading();
if(EventsModel.eventTypesLoaded()) {
startLoadingCategories();
} else {
EventsModel.fetchEventTypes(this, new Handler() {
@Override
public void handleMessage(Message message) {
if(message.arg1 == MobileWebApi.SUCCESS) {
startLoadingCategories();
} else {
mLoadingView.showError();
}
}
});
}
}
private void startLoadingCategories() {
mEventType = EventsModel.getEventType(mSourceId);
if (mEventType == null) {
mLoadingView.showError();
Toast.makeText(this, "Calendar for category not found", Toast.LENGTH_LONG);
return;
}
mSourceName = mEventType.getShortName();
mTitleBar.setTitle(mSourceName);
EventsModel.fetchCategories(this, mEventType, handleCategories());
}
private Handler handleCategories() {
return new Handler() {
@Override
public void handleMessage(Message message) {
if(message.arg1 == MobileWebApi.SUCCESS) {
List<EventCategoryItem> categories = EventsModel.getCategories(mEventType);
loadCategories(categories);
} else {
mLoadingView.showError();
}
}
};
}
private void loadCategories(List<EventCategoryItem> categories) {
SimpleArrayAdapter<EventCategoryItem> adapter = new EventCategoryArrayAdapter(mContext, categories);
adapter.setOnItemClickListener(mListView,
new SimpleArrayAdapter.OnItemClickListener<EventCategoryItem>() {
@Override
public void onItemSelected(EventCategoryItem item) {
// hard code the open house to show april 30th;
Long startTime = null;
if(mEventType.getTypeId().equals("OpenHouse")) {
startTime = 1304179200L * 1000; // April 30th, 2011
}
MITEventsDaysSliderActivity.launchCategory(mContext, item.catid, item.name, mEventType.getTypeId(), startTime);
}
}
);
mListView.setAdapter(adapter);
mLoadingView.setVisibility(View.GONE);
mListView.setVisibility(View.VISIBLE);
}
@Override
protected Module getModule() {
return new EventsModule();
}
@Override
public boolean isModuleHomeActivity() {
return false;
}
private class EventCategoryArrayAdapter extends SimpleArrayAdapter<EventCategoryItem> {
public EventCategoryArrayAdapter(Context context, List<EventCategoryItem> items) {
super(context, items, R.layout.events_category_row);
}
@Override
public void updateView(EventCategoryItem item, View view) {
TwoLineActionRow actionRow = (TwoLineActionRow) view;
actionRow.setTitle(item.name);
}
}
@Override
protected void prepareActivityOptionsMenu(Menu menu) {
menu.add(0, MENU_SEARCH, Menu.NONE, MENU_SEARCH_TITLE)
.setIcon(R.drawable.menu_search);
}
}