package com.transitwidget.fragments;
import android.app.Activity;
import android.content.ContentUris;
import android.database.Cursor;
import android.os.AsyncTask;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import com.actionbarsherlock.app.SherlockListFragment;
import com.transitwidget.R;
import com.transitwidget.api.ServiceProvider;
import com.transitwidget.feed.model.Agency;
public class AgencyListFragment extends SherlockListFragment {
private SimpleCursorAdapter mAdapter;
private Listener mListener;
@Override
public void onStart() {
super.onStart();
mListener = (Listener)getActivity();
String[] from = {Agency.TITLE};
int[] to = {com.transitwidget.R.id.value};
mAdapter = new SimpleCursorAdapter(getActivity(), R.layout.single_list_item, null, from, to);
setListAdapter(mAdapter);
loadAgencyList();
}
public void loadAgencyList() {
final Activity activity = this.getActivity();
new AsyncTask<String, Integer, Cursor>() {
protected void onPreExecute() {
setListShown(false);
}
@Override
protected Cursor doInBackground(String... params) {
Cursor cursor = activity.getContentResolver().query(Agency.CONTENT_URI, null, null, null, null);
if (cursor.getCount() == 0) {
// load from network and cache to DB.
ServiceProvider.getAgencies(activity);
cursor.close();
cursor = activity.getContentResolver().query(Agency.CONTENT_URI, null, null, null, null);
}
return cursor;
}
protected void onPostExecute(Cursor cursor) {
activity.startManagingCursor(cursor);
mAdapter.changeCursor(cursor);
if (isVisible()) {
setListShown(true);
}
}
}.execute();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor cursor = getActivity().getContentResolver().query(ContentUris.withAppendedId(Agency.CONTENT_URI, id), new String[] { Agency.TAG }, null, null, null);
String tag = null;
if (cursor.moveToFirst()) {
tag = cursor.getString(0);
}
if (tag != null) {
mListener.agencySelected(tag);
}
}
public static interface Listener {
void agencySelected(String tag);
}
}