package com.papagiannis.tuberun;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.ToggleButton;
import com.papagiannis.tuberun.binders.RailDeparturesBinder;
import com.papagiannis.tuberun.favorites.DeparturesFavorite;
import com.papagiannis.tuberun.favorites.Favorite;
import com.papagiannis.tuberun.fetchers.DeparturesRailFetcher;
import com.papagiannis.tuberun.fetchers.Observer;
public class RailDeparturesActivity extends ListActivity implements Observer,
OnClickListener {
private DeparturesRailFetcher fetcher;
private final ArrayList<HashMap<String, Object>> departures_list = new ArrayList<HashMap<String, Object>>();
private Station station;
private ListView listView;
private TextView lineTextView;
private LinearLayout emptyLayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
create();
}
private void create() {
setContentView(R.layout.bus_departures);
departures_list.clear();
TextView title = (TextView) findViewById(R.id.title_textview);
title.setText("Rail Departures");
Button back_button = (Button) findViewById(R.id.back_button);
Button logo_button = (Button) findViewById(R.id.logo_button);
OnClickListener back_listener = new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
};
back_button.setOnClickListener(back_listener);
logo_button.setOnClickListener(back_listener);
emptyLayout = (LinearLayout) findViewById(R.id.empty_layout);
emptyLayout.setVisibility(View.GONE);
listView = getListView();
lineTextView = (TextView) findViewById(R.id.line_textview);
Bundle extras = getIntent().getExtras();
station = (Station) extras.get("station");
if (station == null)
return;
lineTextView.setText(station.getName().toUpperCase(Locale.UK));
fetcher = new DeparturesRailFetcher(station);
fetcher.registerCallback(this);
fetcher.update();
Favorite.getFavorites(this);
View updateButton = findViewById(R.id.button_update);
updateButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
emptyLayout.setVisibility(View.GONE);
setListAdapter(null);
fetcher.update();
}
});
ToggleButton favButton = (ToggleButton) findViewById(R.id.add_favorite);
DeparturesFavorite fav = new DeparturesFavorite(LineType.RAIL,
new DeparturesRailFetcher(station));
fav.setIdentification(station.getCode());
fav.setStation_nice(station.getName());
favButton.setChecked(Favorite.isFavorite(fav));
favButton.setOnClickListener(this);
}
@Override
public void update() {
departures_list.clear();
ArrayList<HashMap<String, String>> trains = fetcher.getUnsortedDepartures();
for (HashMap<String, String> train : trains) {
HashMap<String, Object> m = new HashMap<String, Object>();
m.put("time1", train.get("time"));
m.put("time2", train.get("time"));
m.put("destination", train.get("destination"));
m.put("status", train.get("position"));
// m.put("status", "random crap");
String plat = train.get("platform").trim();
m.put("platform", plat);
departures_list.add(m);
}
if (trains.isEmpty()) {
emptyLayout.setVisibility(View.VISIBLE);
} else {
emptyLayout.setVisibility(View.GONE);
}
SimpleAdapter adapter = new SimpleAdapter(this, departures_list,
R.layout.rail_departures_status, new String[] { "time1", "time2",
"platform", "destination", "status", "favorite" },
new int[] { R.id.time1, R.id.time2, R.id.platform,
R.id.destination,R.id.status, R.id.add_favorite });
adapter.setViewBinder(new RailDeparturesBinder(this));
setListAdapter(adapter);
listView.setVisibility(View.VISIBLE);
}
@Override
public void onClick(View v) {
ToggleButton tb = (ToggleButton) v;
if (tb.isChecked()) {
DeparturesFavorite fav = new DeparturesFavorite(LineType.RAIL,
new DeparturesRailFetcher(station));
fav.setStation_nice(station.getName());
fav.setIdentification(station.getCode());
Favorite.addFavorite(fav, this);
} else {
DeparturesFavorite fav = new DeparturesFavorite(LineType.RAIL,
new DeparturesRailFetcher(station));
fav.setIdentification(station.getCode());
fav.setStation_nice(station.getName());
Favorite.removeFavorite(fav, this);
// also try this without station_nice for compatibility before 1.2.3
fav = new DeparturesFavorite(LineType.RAIL,
new DeparturesRailFetcher(station));
fav.setIdentification(station.getCode());
Favorite.removeFavorite(fav, this);
}
}
}