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 * //from w ww . j a va 2 s . c om * 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.List; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.location.Location; import android.os.AsyncTask; import android.os.Bundle; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import fr.gotorennes.domain.Arret; import fr.gotorennes.domain.Circuit; import fr.gotorennes.domain.Ligne; import fr.gotorennes.domain.LineAlert; import fr.gotorennes.domain.NextDeparture; import fr.gotorennes.domain.Station; import fr.gotorennes.remote.NextDepartureService; import fr.gotorennes.util.BackgroundTask; import fr.gotorennes.util.LocationUtils; public class BusArretActivity extends AbstractActivity { private Station station; private Ligne ligne; private List<LineAlert> alertes; private TimerTask timerTask = null; private Timer timer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.busarret); } @Override protected String getTrackingName() { return "arretBus"; } @Override protected void init(Intent intent) { station = intent.getParcelableExtra("station"); latitude = station.latitude; longitude = station.longitude; ligne = intent.getParcelableExtra("ligne"); scheduleTimer(); addCalendrier(intent); TextView stationName = (TextView) findViewById(R.id.stationName); stationName.setText(Html.fromHtml("<u>" + station.nom + "</u>")); stationName.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), BusStationActivity.class); intent.putExtra("station", station); startActivity(intent); } }); CheckBox favoris = (CheckBox) findViewById(R.id.favoris); SharedPreferences prefs = getSharedPreferences("fr.gotorennes.Application", 0); favoris.setChecked(prefs.contains("arretbus-" + station.code + ";" + ligne.code)); ImageView lineIcon = (ImageView) findViewById(R.id.icon); Bitmap icon = goToRennes.getBusStationService().getBitmapIcon(BusArretActivity.this, ligne.id); lineIcon.setImageBitmap(icon); TextView name = (TextView) findViewById(R.id.directionName); name.setVisibility(View.GONE); ListView g = (ListView) findViewById(R.id.passages); g.setAdapter(getStopTimeAdapter(goToRennes.getBusDao().getPassagesDuJour(station.id, ligne.id, calendrier, ligne.isLigneDeNuit(), true), true)); g.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { Arret arret = (Arret) adapter.getItemAtPosition(position); Intent intent = new Intent(getApplicationContext(), BusTripActivity.class); intent.putExtra("ligne", ligne); intent.putExtra("station", station); intent.putExtra("arret", arret); startActivity(intent); } }); 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(), station.latitude, station.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", station.latitude); intent.putExtra("longitudeDest", station.longitude); intent.putExtra("iconDest", getMapIcon()); startActivity(intent); } }); } else { distance.setText("--"); distance.setOnClickListener(null); distance.setClickable(false); } View alertesText = findViewById(R.id.alerte); alertesText.setVisibility(View.GONE); BackgroundTask<?> backgroundTask = getLineAlertBackgroundTask(ligne); backgroundTask.start(this); } @Override protected void onPause() { super.onPause(); timer.cancel(); } @Override protected void onResume() { super.onResume(); if (station != null && ligne != null) { scheduleTimer(); } } protected ListAdapter getStopTimeAdapter(List<Arret> stopTimes, final boolean showMinutes) { return new ArrayAdapter<Arret>(this, 0, stopTimes) { @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.bustrip_stop, null); } Arret arret = getItem(position); Circuit circuit = goToRennes.getBusDao().getCircuitByIdTrajet(arret.idTrajet); TextView name = (TextView) view.findViewById(R.id.stopname); name.setText(circuit.nom); TextView nextStop = (TextView) view.findViewById(R.id.stoptime); nextStop.setText(arret.getDepart()); return view; } }; } @Override protected int getMapIcon() { return R.drawable.bus; } protected BackgroundTask<List<LineAlert>> getLineAlertBackgroundTask(final Ligne ligne) { return new BackgroundTask<List<LineAlert>>(false) { @Override protected List<LineAlert> execute() { return goToRennes.getLineAlertService().getLineAlerts(ligne); } @Override protected void callback(List<LineAlert> result) { if (result != null && !result.isEmpty()) { View alertesText = findViewById(R.id.alerte); alertesText.setVisibility(View.VISIBLE); alertes = result; } } }; } 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("arretbus-" + station.code + ";" + ligne.code, station.nom ); Toast.makeText(getApplicationContext(), getString(R.string.busAjoutFavoris), Toast.LENGTH_SHORT).show(); } else { editor.remove("arretbus-" + station.code + ";" + ligne.code); Toast.makeText(getApplicationContext(), getString(R.string.busSupprimeFavoris), Toast.LENGTH_SHORT).show(); } editor.commit(); } public void showAlerte(View view) { StringBuffer buffer = new StringBuffer(); for (LineAlert alert : alertes) { buffer.append(Html.fromHtml(alert.detail.replaceAll("\\r\\n", "<br/>"))); } showError(buffer.toString()); } @Override protected void onCalendrierChanged() { ListView g = (ListView) findViewById(R.id.passages); g.setAdapter(getStopTimeAdapter(goToRennes.getBusDao().getPassagesDuJour(station.id, ligne.id, calendrier, ligne.isLigneDeNuit(), true), true)); } protected void scheduleTimer() { timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { AsyncTask<String, Void, NextDeparture> task = new AsyncTask<String, Void, NextDeparture>() { @Override protected NextDeparture doInBackground(String... params) { Circuit circuit = goToRennes.getBusDao().getCircuit(ligne, station); return NextDepartureService.getInstance(getBaseContext()).getNextDeparture(station.code, ligne.longCode, circuit.sens); } @Override protected void onPostExecute(NextDeparture result) { TextView nextDeparture = (TextView) findViewById(R.id.nextDeparture); if (result != null && result.departure != null) { int minutes = result.getMinutesBeforeDeparture(); if (minutes == 0) { nextDeparture.setText("< 1 min"); } else { nextDeparture.setText(minutes + " min"); } } else { nextDeparture.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(); } }