package edu.mit.mitmobile2.dining;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import edu.mit.mitmobile2.DividerView;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.dining.DiningMealIterator.MealOrEmptyDay;
import edu.mit.mitmobile2.dining.DiningModel.DiningDietaryFlag;
import edu.mit.mitmobile2.dining.DiningModel.HouseDiningHall;
import edu.mit.mitmobile2.dining.DiningModel.Meal;
import edu.mit.mitmobile2.dining.DiningModel.MenuItem;
public class DiningHouseScheduleSliderAdapter extends DiningHouseAbstractSliderAdapter {
Context mContext;
private String mHallID;
public DiningHouseScheduleSliderAdapter(Context context, HouseDiningHall hall, long selectedTime) {
super(context);
mContext = context;
mHallID = hall.getID();
GregorianCalendar day = new GregorianCalendar();
day.setTimeInMillis(selectedTime);
ArrayList<HouseDiningHall> halls = new ArrayList<HouseDiningHall>();
halls.add(hall);
DiningMealIterator mealIterator = new DiningMealIterator(day, halls);
setMealIterator(mealIterator);
}
@Override
protected View viewForMealOrDay(MealOrEmptyDay mealOrEmptyDay) {
if (mealOrEmptyDay.isEmpty()) {
return noMealsTodayScreen(mealOrEmptyDay.getDayMessage());
} else {
return mealScreen(mealOrEmptyDay.getMeal(mHallID));
}
}
private View noMealsTodayScreen(String message) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dining_meal_message, null);
TextView messageView = (TextView) view.findViewById(R.id.diningMealMessageText);
messageView.setText(message);
return view;
}
private View mealScreen(Meal meal) {
// Parent Layout
ScrollView scrollWrapper = new ScrollView(mContext);
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
scrollWrapper.addView(layout);
// Meal header
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View mealHeader = inflater.inflate(R.layout.dining_meal_header, null);
TextView mealTitleView = (TextView) mealHeader.findViewById(R.id.diningMealHeaderTitle);
TextView mealTimeView = (TextView) mealHeader.findViewById(R.id.diningMealHeaderTime);
mealTitleView.setText(meal.getCapitalizedName());
if (meal.getScheduleSummary() != null) {
mealTimeView.setText(meal.getScheduleSummary());
}
layout.addView(mealHeader);
// meal message or list of meal items
if (meal.getMessage() != null) {
View view = inflater.inflate(R.layout.dining_meal_message, null);
TextView messageView = (TextView) view.findViewById(R.id.diningMealMessageText);
messageView.setText(meal.getMessage());
} else {
List <DiningDietaryFlag> appliedFilters = DiningDietaryFlag.loadFilters(mContext);
boolean noSelectedFilters = appliedFilters.isEmpty();
if (noSelectedFilters) {
// no filters applied means all filters are applied
appliedFilters = new ArrayList<DiningDietaryFlag>(DiningDietaryFlag.allFlags());
}
boolean showingItems = false;
for (MenuItem menuItem : meal.getMenuItems()) {
boolean showItem = false;
if (menuItem.getDietaryFlags().isEmpty() && noSelectedFilters) {
// if menuItem does not have any flags and no filters have been selected (before we take all filters)
showItem = true;
}
for (DiningDietaryFlag menuFlag : menuItem.getDietaryFlags()) {
if (appliedFilters.contains(menuFlag)) {
showItem = true;
break;
}
}
if (showItem) {
showingItems = true;
View view = inflater.inflate(R.layout.dining_meal_item_row, null);
TextView stationView = (TextView) view.findViewById(R.id.diningMealItemRowStation);
TextView nameView = (TextView) view.findViewById(R.id.diningMealItemRowName);
TextView descriptionView = (TextView) view.findViewById(R.id.diningMealItemRowDescription);
TableLayout dietaryFlags = (TableLayout) view.findViewById(R.id.diningMealItemRowDietaryFlagsTable);
stationView.setText(menuItem.getStation());
nameView.setText(menuItem.getName());
if (menuItem.getDescription() != null) {
descriptionView.setText(menuItem.getDescription());
} else {
descriptionView.setVisibility(View.GONE);
}
List<DiningDietaryFlag> flags = menuItem.getDietaryFlags();
TableRow tableRow = null;
int columns = 2;
for (int i = 0; i < flags.size(); i++) {
if (i % columns == 0) {
// lets make new row
tableRow = new TableRow(mContext);
tableRow.setGravity(Gravity.RIGHT);
dietaryFlags.addView(tableRow);
}
ImageView flagImageView = new ImageView(mContext);
DiningDietaryFlag flag = flags.get(i);
if (flag != null) {
flagImageView.setImageResource(flag.getIconId());
}
tableRow.addView(flagImageView);
}
layout.addView(view);
View dividerView = new DividerView(mContext, null);
layout.addView(dividerView);
}
}
if (!showingItems) {
String message;
if (meal.getMenuItems().size() == 0) {
message = "No items";
} else {
message = "No matching items";
}
layout.addView(getEmptyMenuView(message));
layout.addView(new DividerView(mContext, null));
}
View rotateLegend = inflater.inflate(R.layout.dining_rotate_legend, null);
layout.addView(rotateLegend);
rotateLegend.setBackgroundColor(mContext.getResources().getColor(R.color.rowBackground));
}
return scrollWrapper;
}
private View getEmptyMenuView(String message) {
TextView emptyMessage = new TextView(mContext);
emptyMessage.setGravity(Gravity.CENTER_HORIZONTAL);
emptyMessage.setTextAppearance(mContext, R.style.ListItemPrimary);
emptyMessage.setText(message);
int topPadding = mContext.getResources().getDimensionPixelSize(R.dimen.standardPadding);
emptyMessage.setPadding(topPadding, topPadding, topPadding, topPadding);
emptyMessage.setBackgroundColor(Color.WHITE);
return emptyMessage;
}
}