package com.ese2013.mensaunibe.map; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import com.ese2013.mensaunibe.R; import com.ese2013.mensaunibe.model.Model; import com.ese2013.mensaunibe.model.mensa.Mensa; 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.google.android.gms.maps.model.PolylineOptions; /** * @author group17 * @author Marc Dojtschinov */ public class MapActivityOneMensa extends BaseMapActivity { private Mensa mensa; private GoogleMap map; private MyLocation mLocation; private LatLng mLocationLatLng; private Marker mensaMarker; private int mMensaId; private String travelMode = "walking";// default @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_map); //Setup action bar ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); initilizeMap(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_map, menu); return super.onCreateOptionsMenu(menu); } public void handleGetDirectionsResult(ArrayList<LatLng> directionPoints) { PolylineOptions rectLine = new PolylineOptions().width(3).color(Color.RED); for(int i = 0 ; i < directionPoints.size() ; i++) { rectLine.add(directionPoints.get(i)); } map.addPolyline(rectLine); } @SuppressWarnings("unchecked") @Override public void findDirections(double fromPositionDoubleLat, double fromPositionDoubleLong, double toPositionDoubleLat, double toPositionDoubleLong, String mode) { Map<String, String> map = new HashMap<String, String>(); map.put(GetDirectionsAsyncTask.USER_CURRENT_LAT, String.valueOf(fromPositionDoubleLat)); map.put(GetDirectionsAsyncTask.USER_CURRENT_LONG, String.valueOf(fromPositionDoubleLong)); map.put(GetDirectionsAsyncTask.DESTINATION_LAT, String.valueOf(toPositionDoubleLat)); map.put(GetDirectionsAsyncTask.DESTINATION_LONG, String.valueOf(toPositionDoubleLong)); map.put(GetDirectionsAsyncTask.DIRECTIONS_MODE, mode); GetDirectionsAsyncTask asyncTask = new GetDirectionsAsyncTask(this); asyncTask.execute(map); } @Override public void initilizeMap() { if (map == null) { map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); //check if map is created successfully or not if (map != null) { setUpMap(); } } } public void setUpMap(){ if(mLocation == null){ mLocation = MyLocation.getInstance(); mLocation.setActivity(this); } mMensaId = getIntent().getIntExtra("int_value",0); mensa = Model.getInstance().getMensaById(mMensaId); //canteen name as action bar title setTitle(mensa.getName()); mLocationLatLng =new LatLng(mLocation.getLocation().getLatitude(),mLocation.getLocation().getLongitude()); final View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView(); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(mLocationLatLng.latitude, mLocationLatLng.longitude),14.0f) ); mensaMarker = map.addMarker(new MarkerOptions().position(new LatLng(mensa.getLat(),mensa.getLon())) .title(mensa.getName())); findDirections(mLocationLatLng.latitude, mLocationLatLng.longitude, mensaMarker.getPosition().latitude, mensaMarker.getPosition().longitude, travelMode ); } }); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_travel_mode: if(travelMode.contentEquals("walking")) { travelMode ="driveing"; map.clear(); mensaMarker = map.addMarker(new MarkerOptions().position(new LatLng(mensa.getLat(),mensa.getLon())) .title(mensa.getName())); findDirections(mLocationLatLng.latitude, mLocationLatLng.longitude, mensaMarker.getPosition().latitude, mensaMarker.getPosition().longitude, travelMode ); item.setTitle(getString(R.string.action_travel_mode_walking)); } else { travelMode ="walking"; map.clear(); mensaMarker = map.addMarker(new MarkerOptions().position(new LatLng(mensa.getLat(),mensa.getLon())) .title(mensa.getName())); findDirections(mLocationLatLng.latitude, mLocationLatLng.longitude, mensaMarker.getPosition().latitude, mensaMarker.getPosition().longitude, travelMode ); item.setTitle(getString(R.string.action_travel_mode_driveing)); } return true; default: return super.onOptionsItemSelected(item); } } @Override public void onResume() { super.onResume(); mLocation.callOnResume(); } @Override public void onStop() { super.onStop(); mLocation.callOnStop(); } @Override public void onPause() { super.onPause(); mLocation.callOnPause(); } @Override public void onStart() { super.onStart(); mLocation.callOnStart(); } }