package edu.mit.mitmobile2.dining;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.NewModuleActivity;
import edu.mit.mitmobile2.dining.DiningModel.DiningDietaryFlag;
import edu.mit.mitmobile2.dining.DiningModel.DiningHall;
import edu.mit.mitmobile2.dining.DiningModel.DiningVenues;
import edu.mit.mitmobile2.dining.DiningModel.HouseDiningHall;
public class DiningScheduleActivity extends NewModuleActivity {
private static int FILTER_ACTIVITY_REQUEST_CODE = 1;
private static String SELECTED_DATE_KEY = "selected_date";
private static String HOUSE_DINING_HALL_ID_KEY = "hall_id";
private List<DiningDietaryFlag> mFiltersApplied;
LinearLayout mMainLayout;
private DiningScheduleScreen mDiningScheduleScreen;
private HouseDiningHall mSelectedHouse;
public static void launch(Context context, DiningHall diningHall) {
if (diningHall instanceof HouseDiningHall) {
Intent intent = new Intent(context, DiningScheduleActivity.class);
intent.putExtra(HOUSE_DINING_HALL_ID_KEY, diningHall.getID());
context.startActivity(intent);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DiningVenues venues = DiningModel.getDiningVenues();
if (venues == null) {
// fail gracefully
finish();
return;
}
mFiltersApplied = DiningDietaryFlag.loadFilters(this);
String houseID = getIntent().getStringExtra(HOUSE_DINING_HALL_ID_KEY);
mSelectedHouse = venues.getHouseDiningHall(houseID);
long selectedTime;
if (savedInstanceState != null) {
selectedTime = savedInstanceState.getLong(SELECTED_DATE_KEY);
} else {
selectedTime = DiningModel.currentTimeMillis();
}
GregorianCalendar selectedDate = new GregorianCalendar();
selectedDate.setTimeInMillis(selectedTime);
int orientation = getResources().getConfiguration().orientation;
switch (orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
mDiningScheduleScreen = new LandscapeDiningScheduleScreen(venues, selectedDate);
break;
case Configuration.ORIENTATION_PORTRAIT:
default:
mDiningScheduleScreen = new PortraitDiningScheduleScreen(venues, mSelectedHouse, selectedDate);
break;
}
View view = mDiningScheduleScreen.initializeView(this);
setContentView(view, false);
if (mDiningScheduleScreen.titleBarHidden()) {
getTitleBar().setVisibility(View.GONE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILTER_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
List<DiningDietaryFlag> list = data.getParcelableArrayListExtra(DiningFilterActivity.SELECTED_FILTERS);
mFiltersApplied = list;
DiningDietaryFlag.saveFilters(this, mFiltersApplied);
mDiningScheduleScreen.refreshScreen();
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putLong(SELECTED_DATE_KEY, mDiningScheduleScreen.getSelectedDate(mSelectedHouse).getTimeInMillis());
}
@Override
protected NewModule getNewModule() {
return new DiningModule();
}
@Override
protected boolean isScrollable() {
return false;
}
@Override
protected List<String> getMenuItemBlackList() {
ArrayList<String> list = new ArrayList<String>();
int orientation = getResources().getConfiguration().orientation;
switch (orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
list.add(DiningModule.FILTER_ITEM_ID);
case Configuration.ORIENTATION_PORTRAIT:
default:
}
list.add(DiningModule.LISTVIEW_ITEM_ID);
list.add(DiningModule.MAPVIEW_ITEM_ID);
return list;
}
@Override
protected void onOptionSelected(String optionId) {
if (optionId.equals(DiningModule.FILTER_ITEM_ID)) {
Intent intent = new Intent(this, DiningFilterActivity.class);
intent.putParcelableArrayListExtra(DiningFilterActivity.SELECTED_FILTERS, new ArrayList<DiningDietaryFlag>(mFiltersApplied));
startActivityForResult(intent, FILTER_ACTIVITY_REQUEST_CODE);
}
}
@Override
protected boolean isModuleHomeActivity() {
return false;
}
}