Back to project page Go2-Rennes.
The source code is released under:
GNU General Public License
If you think the Android project Go2-Rennes listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/******************************************************************************* * Copyright (c) 2011 Michel DAVID mimah35-at-gmail.com * // w w w . j a v a2 s . co m * 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.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.location.Location; import android.os.AsyncTask; import android.os.Bundle; import android.text.Html; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import fr.gotorennes.domain.Circuit; import fr.gotorennes.domain.Equipement; import fr.gotorennes.domain.MetroStation; import fr.gotorennes.domain.NextDeparture; import fr.gotorennes.domain.NextMetroDeparture; import fr.gotorennes.remote.NextDepartureService; import fr.gotorennes.remote.NextMetroDepartureService; import fr.gotorennes.util.BackgroundTask; import fr.gotorennes.util.LocationUtils; public class MetroStationActivity extends AbstractActivity { private MetroStation metroStation; private TimerTask timerTask = null; private Timer timer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.metrostation); } @Override protected String getTrackingName() { return "stationMetro"; } @Override protected void init(Intent intent) { metroStation = intent.getParcelableExtra("metroStation"); latitude = metroStation.latitude; longitude = metroStation.longitude; scheduleTimer(); TextView stationName = (TextView) findViewById(R.id.stationName); stationName.setText(metroStation.name); if ("JFK".equals(metroStation.id)) { findViewById(R.id.nextDeparture1Layout).setVisibility(View.GONE); } if ("POT".equals(metroStation.id)) { findViewById(R.id.nextDeparture2Layout).setVisibility(View.GONE); } CheckBox favoris = (CheckBox) findViewById(R.id.favoris); SharedPreferences prefs = getSharedPreferences("fr.gotorennes.Application", 0); favoris.setChecked(prefs.contains("metro-" + metroStation.id)); loadMetroStationStatus(); TextView distance = (TextView) findViewById(R.id.distance); final Location location = LocationUtils.getLocation(this); if(location != null) { distance.setText(Html.fromHtml("<u>" + AbstractMapActivity.getFormattedDistance(location.getLatitude(), location.getLongitude(), metroStation.latitude, metroStation.longitude) + "</u>")); distance.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), ItineraireMapActivity.class); intent.putExtra("latitude", location.getLatitude()); intent.putExtra("longitude", location.getLongitude()); intent.putExtra("latitudeDest", metroStation.latitude); intent.putExtra("longitudeDest", metroStation.longitude); intent.putExtra("iconDest", getMapIcon()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }); } else { distance.setText("--"); distance.setOnClickListener(null); distance.setClickable(false); } } @Override protected void onPause() { super.onPause(); timer.cancel(); } @Override protected void onResume() { super.onResume(); if (metroStation != null) { scheduleTimer(); } } @Override protected int getMapIcon() { return R.drawable.metro; } protected void loadMetroStationStatus() { BackgroundTask<Boolean> backgroundTask = new BackgroundTask<Boolean>(false) { @Override protected Boolean execute() { return goToRennes.getMetroStationStatusService().getMetroStationStatus(metroStation); } @Override protected void callback(Boolean result) { TextView statut = (TextView) findViewById(R.id.statut); statut.setText(result ? getString(R.string.metroOuverte) : getString(R.string.metroFermee)); BackgroundTask<?> task = getEquipementsBackgroundTask(); task.start(MetroStationActivity.this); } }; backgroundTask.start(this); } protected BackgroundTask<List<Equipement>> getEquipementsBackgroundTask() { return new BackgroundTask<List<Equipement>>(false) { @Override protected List<Equipement> execute() { List<Equipement> equipements = goToRennes.getEquipementService().getEquipements(metroStation); List<Equipement> equipementsDefectueux = new ArrayList<Equipement>(); if(equipements != null) { for(Equipement equipement : equipements) { if(!goToRennes.getEquipementStatusService().getEquipementStatus(equipement)) { equipementsDefectueux.add(equipement); } } } return equipementsDefectueux; } @Override protected void callback(List<Equipement> result) { View equipementsText = findViewById(R.id.equipementsText); LinearLayout equipements = (LinearLayout) findViewById(R.id.equipements); equipements.removeAllViews(); if (result != null && !result.isEmpty()) { equipementsText.setVisibility(View.VISIBLE); equipements.setVisibility(View.VISIBLE); for (Equipement equipement : result) { RelativeLayout view = (RelativeLayout) getLayoutInflater().inflate(R.layout.equipement_listitem, null); ImageView lineIcon = (ImageView) view.findViewById(R.id.icon); TextView text = (TextView) view.findViewById(R.id.name); StringBuilder builder = new StringBuilder(); if("ASCENSEUR".equals(equipement.type)) { lineIcon.setImageResource(R.drawable.ascenseur); builder.append(getString(R.string.metroAscenseur)); } else { lineIcon.setImageResource(R.drawable.escalator); builder.append(getString(R.string.metroEscalator)); } switch(equipement.plateforme) { case 0 : builder.append(getString(R.string.intermediaire)); break; case 1 : builder.append(getString(R.string.directionKennedy)); break; case 2 : builder.append(getString(R.string.directionPoterie)); break; } builder.append("("); builder.append(equipement.fromFloor); builder.append(getString(R.string.a)); builder.append(equipement.toFloor); builder.append(")"); text.setText(builder.toString()); equipements.addView(view); } } else { equipementsText.setVisibility(View.GONE); equipements.setVisibility(View.GONE); } } }; } public void updateFavoris(View view) { CheckBox checkbox = (CheckBox) view; SharedPreferences prefs = getSharedPreferences("fr.gotorennes.Application", 0); Editor editor = prefs.edit(); if (checkbox.isChecked()) { editor.putString("metro-" + metroStation.id, metroStation.name); Toast.makeText(getApplicationContext(), getString(R.string.metroAjoutFavoris), Toast.LENGTH_SHORT).show(); } else { editor.remove("metro-" + metroStation.id); Toast.makeText(getApplicationContext(), getString(R.string.metroSupprimeFavoris), Toast.LENGTH_SHORT).show(); } editor.commit(); } protected void scheduleTimer() { timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { AsyncTask<String, Void, NextMetroDeparture> task = new AsyncTask<String, Void, NextMetroDeparture>() { @Override protected NextMetroDeparture doInBackground(String... params) { return NextMetroDepartureService.getInstance(getBaseContext()).getNextDeparture(metroStation.id); } @Override protected void onPostExecute(NextMetroDeparture result) { if ("JFK".equals(metroStation.id) && result != null) { result.nextBackwardDeparture = result.nextForwardDeparture; result.nextForwardDeparture = null; } TextView nextDeparture1 = (TextView) findViewById(R.id.nextDeparture1); if (result != null && result.nextForwardDeparture != null) { int minutes = result.getMinutesBeforeForwardDeparture(); if (minutes == 0) { nextDeparture1.setText("< 1 min"); } else if (minutes > 0) { nextDeparture1.setText(minutes + " min"); } else { nextDeparture1.setText("??? min"); } } else { nextDeparture1.setText("??? min"); } TextView nextDeparture2 = (TextView) findViewById(R.id.nextDeparture2); if (result != null && result.nextBackwardDeparture != null) { int minutes = result.getMinutesBeforeBackwardDeparture(); if (minutes == 0) { nextDeparture2.setText("< 1 min"); } else if (minutes > 0){ nextDeparture2.setText(minutes + " min"); } else { nextDeparture2.setText("??? min"); } } else { nextDeparture2.setText("??? min"); } } }; task.execute(); } }; timer.scheduleAtFixedRate(timerTask, 0, 30000); } public void helpRealtime(View view) { Toast.makeText(this, getString(R.string.realtime), Toast.LENGTH_LONG).show(); } }