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.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
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;
class DiningComparisionSliderAdapter extends DiningHouseAbstractSliderAdapter {
private Context mContext;
private int mDarkColor;
private int mLightColor;
List<HouseDiningHall> mHalls;
public DiningComparisionSliderAdapter(Context context, List<HouseDiningHall> halls, long selectedTime) {
super(context);
mContext = context;
mHalls = halls;
GregorianCalendar day = new GregorianCalendar();
day.setTimeInMillis(selectedTime);
DiningMealIterator mealIterator = new DiningMealIterator(day, mHalls);
setMealIterator(mealIterator);
}
@Override
protected View viewForMealOrDay(MealOrEmptyDay mealOrEmptyDay) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dining_comparison_meal, null);
DiningDividerLinearLayout hallTitles = (DiningDividerLinearLayout) view.findViewById(R.id.diningComparisonMealHallTitles);
DiningDividerLinearLayout hallSubtitles = (DiningDividerLinearLayout) view.findViewById(R.id.diningComparisonMealHallSubtitles);
DiningDividerLinearLayout menus = (DiningDividerLinearLayout) view.findViewById(R.id.diningComparisonMealMenus);
mDarkColor = mContext.getResources().getColor(R.color.diningGray);
mLightColor = Color.WHITE;
hallTitles.setDividerColor(mDarkColor);
hallSubtitles.setDividerColor(mLightColor);
menus.setDividerColor(mDarkColor);
LayoutParams columnLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f);
for (HouseDiningHall hall : mHalls) {
Meal meal = mealOrEmptyDay.getMeal(hall.getID());
TextView titleView = new TextView(mContext);
titleView.setGravity(Gravity.CENTER);
titleView.setText(hall.getShortName());
titleView.setTextAppearance(mContext, R.style.DiningComparisonHallTitle);
hallTitles.addView(titleView, columnLayoutParams);
TextView subtitleView = new TextView(mContext);
subtitleView.setGravity(Gravity.CENTER);
subtitleView.setTextAppearance(mContext, R.style.DiningComparisonHallSubtitle);
hallSubtitles.addView(subtitleView, columnLayoutParams);
View menuView;
if (meal != null) {
subtitleView.setText(meal.getScheduleSummaryForColumns());
menuView = getMenuView(meal);
} else {
menuView = getEmptyMenuView("No meals");
}
menus.addView(menuView, columnLayoutParams);
}
return view;
}
private View getMenuView(Meal meal) {
DiningDividerLinearLayout menuItemsLayout = new DiningDividerLinearLayout(mContext);
menuItemsLayout.setOrientation(LinearLayout.VERTICAL);
menuItemsLayout.setDividerColor(mDarkColor);
List<DiningDietaryFlag> appliedFlags = DiningDietaryFlag.loadFilters(mContext);
boolean noSelectedFlags = appliedFlags.isEmpty();
if (noSelectedFlags) {
appliedFlags = new ArrayList<DiningDietaryFlag>(DiningDietaryFlag.allFlags());
}
boolean showingMenuItems = false;
for (MenuItem menuItem : meal.getMenuItems()) {
boolean showItem = false;
if (noSelectedFlags) {
showItem = true;
}
for (DiningDietaryFlag flag : menuItem.getDietaryFlags()) {
if (appliedFlags.contains(flag)) {
showItem = true;
break;
}
}
if (showItem) {
showingMenuItems = true;
menuItemsLayout.addView(getMenuItemView(menuItem), new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
}
if (!showingMenuItems) {
String message;
if (meal.getMenuItems().size() == 0) {
message = "No items";
} else {
message = "No matching items";
}
menuItemsLayout.setDrawHorizontalDivider(false);
menuItemsLayout.addView(getEmptyMenuView(message));
}
return menuItemsLayout;
}
private View getEmptyMenuView(String message) {
TextView emptyMessage = new TextView(mContext);
emptyMessage.setGravity(Gravity.CENTER_HORIZONTAL);
emptyMessage.setTextAppearance(mContext, R.style.ListItemSecondary);
emptyMessage.setText(message);
int topPadding = mContext.getResources().getDimensionPixelSize(R.dimen.standardPadding);
emptyMessage.setPadding(0, topPadding, 0, 0);
return emptyMessage;
}
private View getMenuItemView(MenuItem menuItem) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dining_comparison_meal_item, null);
TextView nameView = (TextView) view.findViewById(R.id.diningComparisonMealItemRowName);
TextView descriptionView = (TextView) view.findViewById(R.id.diningComparisonMealItemRowDescription);
LinearLayout dietaryFlags = (LinearLayout) view.findViewById(R.id.diningComparisonMealItemRowDietaryFlagsTable);
nameView.setText(menuItem.getName());
if (menuItem.getDescription() != null) {
descriptionView.setText(menuItem.getDescription());
} else {
descriptionView.setVisibility(View.GONE);
}
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
for (DiningDietaryFlag flag : menuItem.getDietaryFlags()) {
ImageView flagImageView = new ImageView(mContext);
if (flag != null) {
flagImageView.setImageResource(flag.getIconId());
}
dietaryFlags.addView(flagImageView, layoutParams);
}
return view;
}
}