/******************************************************************************* * 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.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.util.Log; 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); TextView statut = (TextView) findViewById(R.id.statut); statut.setText(metroStation.status); 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)); 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); } BackgroundTask<?> task = getEquipementsBackgroundTask(); task.start(MetroStationActivity.this); } @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 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); switch (equipement.type) { case ASCENSEUR: lineIcon.setImageResource(R.drawable.ascenseur); break; case ESCALATOR: lineIcon.setImageResource(R.drawable.escalator); break; case DISTRIBUTEUR: lineIcon.setImageResource(R.drawable.distributeur); } TextView text = (TextView) view.findViewById(R.id.name); text.setText(equipement.name); 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, List<NextMetroDeparture>> task = new AsyncTask<String, Void, List<NextMetroDeparture>>() { @Override protected List<NextMetroDeparture> doInBackground(String... params) { return NextMetroDepartureService.getInstance(getBaseContext()).getNextDeparture(metroStation.name); } @Override protected void onPostExecute(List<NextMetroDeparture> result) { boolean sens0Done = false; boolean sens1Done = false; for (NextMetroDeparture nextDeparture : result) { //Log.d("GoToRennes", nextDeparture.getMinutesBeforeDeparture() + " " + nextDeparture.direction + " " + nextDeparture.name); TextView nextDeparture1 = (TextView) findViewById(R.id.nextDeparture1); if (nextDeparture.direction == 1 && !sens1Done) { int minutes = nextDeparture.getMinutesBeforeDeparture(); if (minutes == 0) { nextDeparture1.setText("< 1 min"); } else if (minutes > 0) { nextDeparture1.setText(minutes + " min"); } else { nextDeparture1.setText("??? min"); } sens1Done = true; } TextView nextDeparture2 = (TextView) findViewById(R.id.nextDeparture2); if (nextDeparture.direction == 0 && !sens0Done) { int minutes = nextDeparture.getMinutesBeforeDeparture(); if (minutes == 0) { nextDeparture2.setText("< 1 min"); } else if (minutes > 0) { nextDeparture2.setText(minutes + " min"); } else { nextDeparture2.setText("??? min"); } sens0Done = true; } } } }; task.execute(); } }; timer.scheduleAtFixedRate(timerTask, 0, 30000); } public void helpRealtime(View view) { Toast.makeText(this, getString(R.string.realtime), Toast.LENGTH_LONG).show(); } }