package ca.uwaterloo.uwfoodservices; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.InflateException; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import com.google.android.gms.maps.CameraUpdate; 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; public class MyMapFragment extends Fragment implements FragmentCommunicator{ public static final String ARG_SECTION_NUMBER = "section_number"; private GoogleMap myMap = null; static final LatLng UW = new LatLng(43.4722, -80.5472); private Context context; private RestaurantLocationHolder holderLoc; private WatcardVendorHolder holderVend; private CameraUpdate center; private CameraUpdate zoom; private String restaurant; private RadioButton showAll; private RadioButton clear; private String watcardVendor; private String filterType = "all"; private int zoomValue = 13; public MyMapFragment(){ } @Override public void onAttach(Activity activity){ super.onAttach(activity); context = getActivity(); ((LocationHours)context).fragmentCommunicator = this; holderLoc = RestaurantLocationHolder.getInstance(); holderVend = WatcardVendorHolder.getInstance(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = null; try { view = inflater.inflate( R.layout.fragment_map, container, false); RadioGroup options_map = (RadioGroup) view.findViewById(R.id.radioGroup); showAll = (RadioButton) view.findViewById(R.id.ShowAll); clear = (RadioButton) view.findViewById(R.id.Clear); SupportMapFragment mySupportMapFragment = (SupportMapFragment)getFragmentManager().findFragmentById(R.id.mapFragment); myMap = mySupportMapFragment.getMap(); if(myMap != null){ myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); LatLng coordinate = new LatLng(43.469828,-80.546415); center=CameraUpdateFactory.newLatLng(coordinate); zoom=CameraUpdateFactory.zoomTo(14); myMap.moveCamera(center); myMap.animateCamera(zoom); myMap.setMyLocationEnabled(true); } options_map.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(RadioGroup group, int position) { if(position == R.id.ShowAll){ myMap.clear(); LatLng coordinate = new LatLng(43.469828,-80.546415); CameraUpdate center= CameraUpdateFactory.newLatLng(coordinate); CameraUpdate zoom=CameraUpdateFactory.zoomTo(zoomValue); myMap.moveCamera(center); myMap.animateCamera(zoom); if (filterType.equals("all")) { for(int i = 0; i < holderLoc.getCount(); i++){ String timings = ""; for(int j = 0; j < holderLoc.objects[i].getTimings().length; j++){ timings += holderLoc.objects[i].getTimings()[j] + "\n"; } restaurant = holderLoc.objects[i].getRestaurant(); Marker restaurant_location = myMap.addMarker(new MarkerOptions() .position(new Coordinates().map.get(holderLoc.objects[i].getRestaurant() + " " + holderLoc.objects[i].getLocation())) .title(restaurant) .snippet(timings)); } for(int i = 0; i < holderVend.getCount(); i++){ String telephoneNumber = holderVend.objects[i].getTelephone(); watcardVendor = holderVend.objects[i].getVendorName(); Marker restaurant_location = myMap.addMarker(new MarkerOptions() .position(new Coordinates().map.get(holderVend.objects[i].getVendorName())) .title(watcardVendor) .snippet(holderVend.objects[i].getLocation() +"\n" + telephoneNumber)); } } else if (filterType.equals("location")) { for(int i = 0; i < holderLoc.getCount(); i++){ String timings = ""; for(int j = 0; j < holderLoc.objects[i].getTimings().length; j++){ timings += holderLoc.objects[i].getTimings()[j] + "\n"; } restaurant = holderLoc.objects[i].getRestaurant(); Marker restaurant_location = myMap.addMarker(new MarkerOptions() .position(new Coordinates().map.get(holderLoc.objects[i].getRestaurant() + " " + holderLoc.objects[i].getLocation())) .title(restaurant) .snippet(timings)); } } else if (filterType.equals("watcardVendors")) { for(int i = 0; i < holderVend.getCount(); i++){ String telephoneNumber = holderVend.objects[i].getTelephone(); watcardVendor = holderVend.objects[i].getVendorName(); Marker restaurant_location = myMap.addMarker(new MarkerOptions() .position(new Coordinates().map.get(holderVend.objects[i].getVendorName())) .title(watcardVendor) .snippet(holderVend.objects[i].getLocation() +"\n" + telephoneNumber)); } } myMap.setInfoWindowAdapter(new CustomInfoView(context)); } else{ myMap.clear(); LatLng coordinate = new LatLng(43.469828,-80.546415); center=CameraUpdateFactory.newLatLng(coordinate); zoom=CameraUpdateFactory.zoomTo(15); myMap.moveCamera(center); myMap.animateCamera(zoom); } } }); } catch (InflateException e) {} return view; } @Override public void passDataToFragment(int position, String filterType) { this.filterType = filterType; showAll.setChecked(false); clear.setChecked(false); if (position == -1){ myMap.clear(); LatLng coordinate = new LatLng(43.469828,-80.546415); center=CameraUpdateFactory.newLatLng(coordinate); zoom=CameraUpdateFactory.zoomTo(14); myMap.moveCamera(center); myMap.animateCamera(zoom); return;} if (filterType.equals("all")) { if ((position>=0) && (position < holderLoc.getCount())) { setupLocationMarker(position); } else { position -= holderLoc.getCount(); setupVendorMarker(position); } } else if (filterType.equals("location")) { setupLocationMarker(position); } else if (filterType.equals("watcardVendors")) { setupVendorMarker(position); } } public void setupLocationMarker(int position) { zoomValue = 14; LatLng coordinate = new Coordinates().map.get(holderLoc.objects[position].getRestaurant() + " " + holderLoc.objects[position].getLocation()); myMap.clear(); CameraUpdate center= CameraUpdateFactory.newLatLng(coordinate); CameraUpdate zoom=CameraUpdateFactory.zoomTo(17); myMap.moveCamera(center); myMap.animateCamera(zoom); String timings = ""; for(int i = 0; i < holderLoc.objects[position].getTimings().length; i++){ timings += holderLoc.objects[position].getTimings()[i] + "\n"; } restaurant = holderLoc.objects[position].getRestaurant(); Marker restaurant_location = myMap.addMarker(new MarkerOptions() .position(coordinate) .title(restaurant) .snippet(timings)); myMap.setInfoWindowAdapter(new CustomInfoView(context)); restaurant_location.showInfoWindow(); } public void setupVendorMarker(int position) { zoomValue = 13; LatLng coordinate = new Coordinates().map.get(holderVend.objects[position].getVendorName()); myMap.clear(); CameraUpdate center= CameraUpdateFactory.newLatLng(coordinate); CameraUpdate zoom=CameraUpdateFactory.zoomTo(17); myMap.moveCamera(center); myMap.animateCamera(zoom); String telephone = ""; telephone = holderVend.objects[position].getTelephone(); watcardVendor = holderVend.objects[position].getVendorName(); Marker vendor_location = myMap.addMarker(new MarkerOptions() .position(coordinate) .title(watcardVendor) .snippet(telephone + "\n" + holderVend.objects[position].getLocation())); myMap.setInfoWindowAdapter(new CustomInfoView(context)); vendor_location.showInfoWindow(); } }