package com.ese2013.mensaunibe.map;
import java.util.ArrayList;
import java.util.Map;
import org.w3c.dom.Document;
import com.ese2013.mensaunibe.R;
import com.google.android.gms.maps.model.LatLng;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.widget.Toast;
/**
* @author group7
* @author Marc Dojtschinov
*/
public class GetDirectionsAsyncTask extends AsyncTask<Map<String, String>, Object, ArrayList<LatLng>> {
public static final String USER_CURRENT_LAT = "user_current_lat";
public static final String USER_CURRENT_LONG = "user_current_long";
public static final String DESTINATION_LAT = "destination_lat";
public static final String DESTINATION_LONG = "destination_long";
public static final String DIRECTIONS_MODE = "directions_mode";
private BaseMapActivity activity;
private Exception exception;
private Dialog progressDialog;
public GetDirectionsAsyncTask(BaseMapActivity activity )
{
super();
assert activity != null;
this.activity = activity;
}
public void onPreExecute() {
progressDialog = new ProgressDialog(activity);
progressDialog.setTitle(R.string.load_map_message);
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
public void onPostExecute(ArrayList<LatLng> result) {
if (progressDialog != null) progressDialog.dismiss();
if (exception == null) {
activity.handleGetDirectionsResult(result);
} else {
processException();
}
}
/**
* Creates An Array with direction points
* for TabCollectionPagerAdapter (Menu lists)
* @param Map
* @return returns an Array<LatLng> with direction pint coordinates
*/
@Override
protected ArrayList<LatLng> doInBackground(Map<String, String>... params) {
Map<String, String> paramMap = params[0];
try{
LatLng fromPosition = new LatLng(Double.valueOf(paramMap.get(USER_CURRENT_LAT)) , Double.valueOf(paramMap.get(USER_CURRENT_LONG)));
LatLng toPosition = new LatLng(Double.valueOf(paramMap.get(DESTINATION_LAT)) , Double.valueOf(paramMap.get(DESTINATION_LONG)));
GetMapDirection md = new GetMapDirection();
Document doc = md.getDocument(fromPosition, toPosition, paramMap.get(DIRECTIONS_MODE));
ArrayList<LatLng> directionPoints = md.getDirection(doc);
return directionPoints;
}
catch (Exception e) {
exception = e;
return null;
}
}
private void processException() {
Toast.makeText(activity, activity.getString(R.string.error_when_retrieving_data), Toast.LENGTH_SHORT).show();
}
}