package com.pennapps.labs.pennmobile; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.pennapps.labs.pennmobile.api.Labs; import com.pennapps.labs.pennmobile.classes.Building; import com.pennapps.labs.pennmobile.classes.DiningHall; import com.pennapps.labs.pennmobile.classes.VenueInterval; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import java.util.LinkedList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; /** * Created by Lily on 11/13/2015. * Fragment for Dining information (hours, map) */ public class DiningInfoFragment extends Fragment { private DiningHall mDiningHall; private MainActivity mActivity; private Labs mLabs; private GoogleMap map; private SupportMapFragment mapFragment; @Bind(R.id.dining_hours) RelativeLayout menuParent; @Bind(R.id.dining_map_frame) View mapFrame; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDiningHall = getArguments().getParcelable("DiningHall"); mActivity = (MainActivity) getActivity(); mLabs = MainActivity.getLabsInstance(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_dining_info, container, false); v.setBackgroundColor(Color.WHITE); ButterKnife.bind(this, v); fillInfo(); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); FragmentManager fm = getChildFragmentManager(); if (mapFragment == null) { mapFragment = SupportMapFragment.newInstance(); fm.beginTransaction().add(R.id.dining_map_container, mapFragment).commit(); fm.executePendingTransactions(); } } private void drawMap() { String buildingCode = mDiningHall.getName(); if (!buildingCode.equals("")) { mLabs.buildings(buildingCode) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<Building>>() { @Override public void call(List<Building> buildings) { if (!buildings.isEmpty()) { drawMarker(buildings.get(0).getLatLng()); } } }); } } private void drawMarker(LatLng diningHallLatLng) { if (map != null && diningHallLatLng != null && mapFrame != null) { mapFrame.setVisibility(View.VISIBLE); map.moveCamera(CameraUpdateFactory.newLatLngZoom(diningHallLatLng, 17)); Marker marker = map.addMarker(new MarkerOptions() .position(diningHallLatLng) .title(mDiningHall.getName())); marker.showInfoWindow(); } } public void fillInfo(){ if (mDiningHall.getVenue() != null) { List<VenueInterval> days = mDiningHall.getVenue().allHours(); LinkedList<TextView> vertical = new LinkedList<>(); for (VenueInterval day: days){ vertical = addDiningHour(day, vertical); } } } public LinkedList<TextView> addDiningHour(VenueInterval day, LinkedList<TextView> vertical){ TextView textView = new TextView(mActivity); DateTimeFormatter intervalFormatter = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTime dateTime = intervalFormatter.parseDateTime(day.date); String dateString = dateTime.dayOfWeek().getAsText() + ", " + dateTime.monthOfYear().getAsString() + "/" + dateTime.dayOfMonth().getAsShortText(); textView.setText(dateString); textView.setTextAppearance(mActivity, R.style.DiningInfoDate); textView.setPadding(0, 40, 0, 0); if (vertical.isEmpty()){ textView.setId(0); textView.setId(textView.getId()+10); menuParent.addView(textView); } else { textView.setId(vertical.getLast().getId()+1); RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); param.addRule(RelativeLayout.BELOW, vertical.getLast().getId()); param.setMargins(0, 10, 10, 0); menuParent.addView(textView, param); } vertical.add(textView); for (VenueInterval.MealInterval meal: day.meals){ TextView mealType = new TextView(mActivity); mealType.setText(meal.type); mealType.setId(vertical.getLast().getId() + 1); RelativeLayout.LayoutParams layparammeal = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); layparammeal.addRule(RelativeLayout.BELOW, vertical.getLast().getId()); layparammeal.setMargins(0, 10, 10, 0); menuParent.addView(mealType, layparammeal); vertical.add(mealType); RelativeLayout.LayoutParams layparamtimes = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); layparamtimes.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, vertical.getLast().getId()); layparamtimes.addRule(RelativeLayout.ALIGN_BOTTOM, vertical.getLast().getId()); layparamtimes.setMargins(0, 10, 0, 0); TextView mealInt = new TextView(mActivity); String hoursString = meal.getFormattedHour(meal.open) + " - " + meal.getFormattedHour(meal.close); mealInt.setText(hoursString); mealInt.setId(vertical.getLast().getId() + 1); menuParent.addView(mealInt, layparamtimes); vertical.add(mealInt); } return vertical; } @Override public void onResume() { super.onResume(); mActivity.getActionBarToggle().setDrawerIndicatorEnabled(false); mActivity.getActionBarToggle().syncState(); getActivity().setTitle(mDiningHall.getName()); if (map == null) { map = mapFragment.getMap(); if (map != null) { map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.95198, -75.19368), 17)); map.getUiSettings().setZoomControlsEnabled(false); } } drawMap(); } @Override public void onDestroyView() { super.onDestroyView(); getActivity().setTitle(mDiningHall.getName()); ButterKnife.unbind(this); } @Override public void onDestroy() { super.onDestroy(); } }