package com.tobiasquinn.fivewaysbustimes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.htmlcleaner.XPatherException;
import org.xml.sax.SAXException;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
public class FivewaysBusTimes extends ListActivity {
public static final String LOG_TAG = "FBT";
private BusAdapter m_buslistaa;
private BusInformation m_bi;
// private BusAdapter m_busadapter;
private int counter = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ListView lv = (ListView) findViewById(R.id.listView1);
List<Bus> buslist = new ArrayList<Bus>();
m_buslistaa = new BusAdapter(this, R.layout.buslist_item, buslist);
Log.v(LOG_TAG, "" + buslist);
setListAdapter(m_buslistaa);
final Button testButton = (Button) findViewById(R.id.buttonTest);
testButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(LOG_TAG, "Test Clicked");
// add a bus to the list
// m_buslistaa.add(new Bus("26", "Churchill Square", "17:43"));
// m_buslistaa.add(new Bus("" + counter++, "Churchill Square",
// "17:43"));
}
});
final Button changeButton = (Button) findViewById(R.id.buttonChange);
changeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(LOG_TAG, "Change Clicked");
m_buslistaa.remove(m_buslistaa.getItem(1));
// m_buslistaa.insert(new Bus("45", "The end of the road",
// "19:00"), 1);
}
});
final Button clearButton = (Button) findViewById(R.id.buttonClear);
clearButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(LOG_TAG, "Clear Clicked");
m_buslistaa.clear();
}
});
final Button fetchButton = (Button) findViewById(R.id.buttonFetch);
fetchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(LOG_TAG, "Fetch Clicked");
// String test_url =
// "http://buses.citytransport.org.uk/smartinfo/service/jsp/?olifServerId=182&autorefresh=0&default_autorefresh=20&routeId=182%2F7&stopId=North+Road&optDir=-1&nRows=10&showArrivals=n&optTime=now&time=";
String test_url = "http://buses.citytransport.org.uk/smartinfo/service/jsp/?olifServerId=182&autorefresh=0&default_autorefresh=20&routeId=182%2F46&stopId=Hove+Town+Hall+BC&optDir=Hollingbury&nRows=10&allLines=y&showArrivals=n&optTime=now&time=";
List<Bus> buslist;
try {
buslist = BusTimeScraper.getBusesFromURL(test_url);
m_buslistaa.update(buslist);
} catch (XPatherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
final Button setList1Button = (Button) findViewById(R.id.buttonSetList1);
final Button setList2Button = (Button) findViewById(R.id.buttonSetList2);
setList1Button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// generate a new list
ArrayList<Bus> list1 = new ArrayList<Bus>();
for (int i = 0; i < 5; i++) {
list1.add(new Bus("" + i, "List1", Calendar.getInstance()));
}
m_buslistaa.update(list1);
}
});
setList2Button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// generate a new list
ArrayList<Bus> list2 = new ArrayList<Bus>();
for (int i = 0; i < 10; i++) {
list2.add(new Bus("" + i, "List1", Calendar.getInstance()));
}
m_buslistaa.update(list2);
}
});
final Button clearStateButton = (Button) findViewById(R.id.buttonClearState);
clearStateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
m_buslistaa.clearState();
}
});
// access our database
m_bi = new BusInformation(this);
final Button dbFetchButton = (Button)findViewById(R.id.buttonDBFetch);
dbFetchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
m_bi.getBusNumbers("Fiveways", "Churchill Square");
}
});
}
private class BusAdapter extends ArrayAdapter<Bus> {
private List<Bus> items;
public BusAdapter(Context context, int textViewResourceId, List<Bus> items) {
super(context, textViewResourceId, items);
this.items = items;
}
// updates the Bus objects held in the BusAdapter with the given List
public void update(List<Bus> buses) {
// take a list of Bus objects
// compare each one to the held list of objects
// remove any extra
int newlen = buses.size();
int oldlen = items.size();
if (newlen < oldlen) {
for (int i = oldlen - 1; i >= newlen; i--) {
items.remove(i);
}
} else if (newlen > oldlen) {
List<Bus> sl = buses.subList(oldlen, newlen);
for (Bus b : sl) {
b.setState('A');
}
items.addAll(sl);
// items.addAll(buses.subList(oldlen, newlen));
}
for (int i = 0; i < items.size(); i++) {
if (!items.get(i).equals(buses.get(i))) {
items.set(i, buses.get(i));
items.get(i).setState('C');
}
}
super.notifyDataSetChanged();
}
public void clearState() {
for (Bus b : items) {
b.setState(' ');
}
super.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.buslist_item, null);
}
Bus b = items.get(position);
if (b != null) {
TextView tvs = (TextView) v.findViewById(R.id.textViewState);
TextView tvt = (TextView) v.findViewById(R.id.textViewTime);
TextView tvn = (TextView) v.findViewById(R.id.textViewNumber);
TextView tvd = (TextView) v.findViewById(R.id.textViewDestination);
if (tvs != null) {
tvs.setText("" + b.getState());
}
if (tvt != null) {
tvt.setText("" + b.getArrivetimeText());
}
if (tvn != null) {
tvn.setText("" + b.getNumber());
}
if (tvd != null) {
tvd.setText("" + b.getDestination());
}
}
return v;
}
}
}