/*******************************************************************************
* Copyright (c) 2011 Michel DAVID mimah35-at-gmail.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package fr.gotorennes;
import java.util.Calendar;
import java.util.List;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.os.AsyncTask;
import fr.gotorennes.domain.Arret;
import fr.gotorennes.domain.BikeStation;
public class ItineraireVeloResultActivity extends AbstractMapActivity {
private boolean departOk = true;
private boolean arriveeOk = true;
private AsyncTask<String, String, Itineraire> t;
@Override
protected int getLayout() {
return R.layout.map_itineraire;
}
@Override
protected void init() {
Intent intent = getIntent();
final String adresseDepart = intent.getStringExtra("depart");
final String adresseArrivee = intent.getStringExtra("arrivee");
final Calendar calendrier = Calendar.getInstance();
calendrier.setTimeInMillis(intent.getLongExtra("date", System.currentTimeMillis()));
final ProgressDialog waitDialog = ProgressDialog.show(this, getString(R.string.titre), getString(R.string.itineraire), true, true, new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if(t != null){
t.cancel(true);
}
finish();
}
});
t = new AsyncTask<String, String, Itineraire>() {
@Override
protected Itineraire doInBackground(String... params) {
int time = Arret.getTime(calendrier, false);
publishProgress(getString(R.string.geolocalisationDepart));
Location depart = getLocation(getApplicationContext(), adresseDepart);
if(depart == null) {
departOk = false;
return null;
}
publishProgress(getString(R.string.geolocalisationArrivee));
Location arrivee = getLocation(getApplicationContext(), adresseArrivee);
if(arrivee == null) {
arriveeOk = false;
return null;
}
int tempsMarche = getTempsMarche(depart, arrivee);
if (tempsMarche <= 10) {
publishProgress(getString(R.string.calculItinerairePieton));
return getItinerairePieton(time, depart, time + tempsMarche, arrivee);
}
publishProgress(getString(R.string.rechercheStationsDepart));
List<BikeStation> bikeStationsDepart = goToRennes.getBikeStationService().getProximityBikeStations(depart.latitude, depart.longitude);
BikeStation stationDepart = bikeStationsDepart.get(0);
Location locationDepartVelo = new Location(stationDepart, getApplicationContext());
int tempsMarcheDepart = getTempsMarche(depart, locationDepartVelo);
publishProgress(getString(R.string.rechercheStationsArrivee));
List<BikeStation> bikeStationsArrivee = goToRennes.getBikeStationService().getProximityBikeStations(arrivee.latitude, arrivee.longitude);
BikeStation stationArrivee = bikeStationsArrivee.get(0);
Location locationArriveeVelo = new Location(stationArrivee, getApplicationContext());
int tempsMarcheArrivee = getTempsMarche(locationArriveeVelo, arrivee);
if(stationDepart.equals(stationArrivee)) {
publishProgress(getString(R.string.calculItinerairePieton));
return getItinerairePieton(time, depart, time + tempsMarche, arrivee);
}
int tempsVelo = getTempsVelo(locationDepartVelo, locationArriveeVelo);
long tempsTotal = tempsMarcheDepart + tempsVelo + tempsMarcheArrivee;
if (tempsTotal > tempsMarche) {
publishProgress(getString(R.string.calculItinerairePieton));
return getItinerairePieton(time, depart, time + tempsMarche, arrivee);
}
publishProgress(getString(R.string.calculItineraireDepart));
Etape etapePietonDepart = getEtape(TypeEtape.PIETON, time, depart, time + tempsMarcheDepart, locationDepartVelo);
publishProgress(getString(R.string.calculItineraireVelo));
Etape etapeVelo = getEtape(TypeEtape.VELO, etapePietonDepart.arrivee, locationDepartVelo, etapePietonDepart.arrivee + tempsVelo, locationArriveeVelo);
publishProgress(getString(R.string.calculItineraireArrivee));
Etape etapePietonArrivee = getEtape(TypeEtape.PIETON, etapeVelo.arrivee, locationArriveeVelo, etapeVelo.arrivee + tempsMarcheArrivee, arrivee);
return new Itineraire(etapePietonDepart, etapeVelo, etapePietonArrivee);
}
@Override
protected void onPostExecute(Itineraire result) {
if( result == null ) {
waitDialog.dismiss();
if(!departOk) {
showError(getString(R.string.erreurAdresseDepart), true);
}
else if(!arriveeOk) {
showError(getString(R.string.erreurAdresseArrivee), true);
}
else {
showError(getString(R.string.erreurItineraire), true);
}
return;
}
populateItineraireDetails(result);
waitDialog.dismiss();
}
@Override
protected void onProgressUpdate(String... values) {
waitDialog.setMessage(values[0]);
}
};
t.execute(adresseDepart, adresseArrivee);
}
@Override
protected String getTrackingName() {
return "itineraireVelo";
}
@Override
protected void loadProximityData() {
// Rien
}
}