package edu.mit.mitmobile2.dining; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import edu.mit.mitmobile2.DividerView; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.SliderView; import edu.mit.mitmobile2.SliderView.Adapter; import edu.mit.mitmobile2.SliderView.OnSeekListener; import edu.mit.mitmobile2.SliderView.ScreenPosition; import edu.mit.mitmobile2.dining.DiningModel.DiningDietaryFlag; import edu.mit.mitmobile2.dining.DiningModel.DiningVenues; import edu.mit.mitmobile2.dining.DiningModel.HouseDiningHall; public class PortraitDiningScheduleScreen extends DiningScheduleScreen { protected DiningVenues mVenues; protected HouseDiningHall mSelectedHouse; protected GregorianCalendar mInitialDate; LinearLayout mMainLayout; protected LinearLayout mFiltersContainer; private Context mContext; private DiningHouseScheduleSliderAdapter mDiningAdapter; private SliderView mSliderView; public PortraitDiningScheduleScreen(DiningVenues venues, HouseDiningHall selectedHouse, GregorianCalendar initialDate) { mVenues = venues; mSelectedHouse = selectedHouse; mInitialDate = initialDate; } @Override public View initializeView(Context context) { mContext = context; mMainLayout = new LinearLayout(context); mMainLayout.setOrientation(LinearLayout.VERTICAL); addHeader(); addSliderView(); return mMainLayout; } protected LayoutInflater getLayoutInflater() { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); return inflater; } protected void addHeader() { DiningHallHeaderView headerView = new DiningHallHeaderView(mContext, mSelectedHouse, DiningModel.currentTimeMillis()); headerView.setActionImageResourceId(R.drawable.menu_info); headerView.setActionClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(mContext, DiningHouseInfoActivity.class); i.putExtra("hall_id", mSelectedHouse.getID()); mContext.startActivity(i); } }); mMainLayout.addView(headerView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); } protected View getAppliedFiltersView() { LayoutInflater inflater = getLayoutInflater(); List <DiningDietaryFlag> appliedFilters = DiningDietaryFlag.loadFilters(mContext); // filter header float density = mContext.getResources().getDisplayMetrics().density; int iconSquare = (int)Math.ceil(18 * density); int iconMargin = (int)Math.ceil(7 * density); Log.d("MARGIN", iconMargin + ""); if (!appliedFilters.isEmpty()) { View filterHeader = inflater.inflate(R.layout.dining_filter_header, null); LinearLayout iconContainer = (LinearLayout)filterHeader.findViewById(R.id.filterIdContainer); LayoutParams params = new LayoutParams(iconSquare, iconSquare); params.setMargins(iconMargin, 0, 0, 0); for (DiningDietaryFlag flag : appliedFilters) { ImageView iconView = new ImageView(mContext); iconView.setLayoutParams(params); iconView.setBackgroundResource(flag.getIconId()); iconContainer.addView(iconView); } return filterHeader; } return null; } protected void addSliderView() { LayoutInflater inflater = getLayoutInflater(); View diningSliderBar = inflater.inflate(R.layout.dining_slider_bar, null); final View leftArrow = diningSliderBar.findViewById(R.id.diningSliderLeftArrow); final View rightArrow = diningSliderBar.findViewById(R.id.diningSliderRightArrow); final TextView sliderTitle = (TextView) diningSliderBar.findViewById(R.id.diningSliderTitle); mMainLayout.addView(diningSliderBar); LinearLayout container = new LinearLayout(mContext); container.setOrientation(LinearLayout.VERTICAL); container.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); mFiltersContainer = container; View appliedFilters = getAppliedFiltersView(); if (appliedFilters != null) { mFiltersContainer.addView(appliedFilters); mFiltersContainer.addView(new DividerView(mContext, null)); } mMainLayout.addView(mFiltersContainer); mSliderView = new SliderView(mContext); mMainLayout.addView(mSliderView); mDiningAdapter = new DiningHouseScheduleSliderAdapter(mContext, mSelectedHouse, mInitialDate.getTimeInMillis()); mSliderView.setAdapter(mDiningAdapter); leftArrow.setEnabled(mDiningAdapter.hasScreen(ScreenPosition.Previous)); rightArrow.setEnabled(mDiningAdapter.hasScreen(ScreenPosition.Next)); sliderTitle.setText(mDiningAdapter.getCurrentTitle()); leftArrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSliderView.slideLeft(); } }); rightArrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mSliderView.slideRight(); } }); mSliderView.setOnSeekListener(new OnSeekListener() { @Override public void onSeek(SliderView view, Adapter adapter) { leftArrow.setEnabled(adapter.hasScreen(ScreenPosition.Previous)); rightArrow.setEnabled(adapter.hasScreen(ScreenPosition.Next)); sliderTitle.setText(mDiningAdapter.getCurrentTitle()); } }); } @Override public Calendar getSelectedDate(HouseDiningHall house) { return mDiningAdapter.getSelectedDate(house); } @Override public void refreshScreen() { mSliderView.refreshScreens(); refreshAppliedFilters(); } public void refreshAppliedFilters() { mFiltersContainer.removeAllViews(); View appliedFilters = getAppliedFiltersView(); if (appliedFilters != null) { mFiltersContainer.addView(appliedFilters); mFiltersContainer.addView(new DividerView(mContext, null)); } } }