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.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.ToggleButton;
import com.papagiannis.tuberun.binders.BusDeparturesBinder;
import com.papagiannis.tuberun.favorites.DeparturesFavorite;
import com.papagiannis.tuberun.favorites.Favorite;
import com.papagiannis.tuberun.fetchers.DeparturesBusFetcher;
import com.papagiannis.tuberun.fetchers.Observer;
public class BusDeparturesActivity extends ListActivity implements Observer, OnClickListener {
private DeparturesBusFetcher fetcher;
private final ArrayList<HashMap<String,Object>> departures_list=new ArrayList<HashMap<String,Object>>();
private String code;
private String name;
private ListView listView;
private TextView lineTextView;
private LinearLayout emptyLayout;
private RelativeLayout warningLayout;
private TextView warningTextview;
/** 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();
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);
warningLayout=(RelativeLayout) findViewById(R.id.warning_layout);
warningTextview=(TextView) findViewById(R.id.warning_textview);
warningTextview.setMovementMethod(new ScrollingMovementMethod());
Bundle extras = getIntent().getExtras();
code = (String) extras.get("code");
name = (String) extras.get("name");
lineTextView.setText(name.toUpperCase(Locale.UK));
fetcher=new DeparturesBusFetcher(code,name);
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);
warningLayout.setVisibility(View.GONE);
setListAdapter(null);
fetcher.update();
}
});
ToggleButton favButton = (ToggleButton) findViewById(R.id.add_favorite);
DeparturesFavorite fav=new DeparturesFavorite(LineType.BUSES,new DeparturesBusFetcher(code,name));
fav.setIdentification(code);
fav.setStation_nice(name);
favButton.setChecked(Favorite.isFavorite(fav));
favButton.setOnClickListener(this);
}
@Override
public void update() {
departures_list.clear();
HashMap<String, ArrayList<HashMap<String, String>>> reply=fetcher.getDepartures();
for (String platform : reply.keySet()) {
ArrayList<HashMap<String, String>> trains=reply.get(platform);
for (HashMap<String,String> train : trains) {
HashMap<String,Object> m=new HashMap<String,Object>();
m.put("route", train.get("routeId"));
m.put("destination", train.get("destination"));
String time=train.get("estimatedWait");
m.put("time", time);
departures_list.add(m);
}
}
if (reply.isEmpty()) {
emptyLayout.setVisibility(View.VISIBLE);
}
else {
emptyLayout.setVisibility(View.GONE);
}
SimpleAdapter adapter=new SimpleAdapter(this,
departures_list,
R.layout.bus_departures_status,
new String[]{"route","time", "destination", "favorite"},
new int[]{R.id.bus_departures_route, R.id.bus_departures_time,
R.id.bus_departures_destination, R.id.add_favorite });
adapter.setViewBinder(new BusDeparturesBinder());
setListAdapter(adapter);
listView.setVisibility(View.VISIBLE);
if (fetcher.hasWarnings()) {
warningTextview.setText(fetcher.getWarnings());
warningLayout.setVisibility(View.VISIBLE);
}
else warningLayout.setVisibility(View.GONE);
}
@Override
public void onClick(View v) {
ToggleButton tb=(ToggleButton)v;
if (tb.isChecked()) {
DeparturesFavorite fav=new DeparturesFavorite(LineType.BUSES,new DeparturesBusFetcher(code,name));
fav.setStation_nice(name);
fav.setIdentification(code);
Favorite.addFavorite(fav, this);
}
else {
DeparturesFavorite fav=new DeparturesFavorite(LineType.BUSES,new DeparturesBusFetcher(code,name));
fav.setIdentification(code);
fav.setStation_nice(name);
Favorite.removeFavorite(fav, this);
//also try this without station_nice for compatibility before 1.2.3
fav=new DeparturesFavorite(LineType.BUSES,new DeparturesBusFetcher(code,name));
fav.setIdentification(code);
Favorite.removeFavorite(fav, this);
}
}
}