package com.transitwidget.fragments; import android.app.Activity; import android.content.ContentUris; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import com.actionbarsherlock.app.SherlockListFragment; import com.transitwidget.R; import com.transitwidget.feed.model.Direction; import com.transitwidget.feed.model.Stop; import com.transitwidget.utils.StringUtils; public class StopListFragment extends SherlockListFragment { public static final String ARG_AGENCY_TAG = "agencyTag"; public static final String ARG_DIRECTION_TAG = "routeTag"; private SimpleCursorAdapter mAdapter; private Listener mListener; public StopListFragment() { super(); } public StopListFragment(Listener listener, Bundle args) { super(); mListener = listener; setArguments(args); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); String[] from = {Direction.TITLE}; int[] to = {R.id.value}; mAdapter = new SimpleCursorAdapter(getActivity(), R.layout.single_list_item, null, from, to); setListAdapter(mAdapter); } @Override public void onResume() { super.onResume(); String agencyTag = getArguments().getString(ARG_AGENCY_TAG); String directionTag = getArguments().getString(ARG_DIRECTION_TAG); loadStopList(agencyTag, directionTag); } public void loadStopList(final String agencyTag, final String directionTag) { final Activity activity = this.getActivity(); new AsyncTask<String, Integer, Cursor>() { @Override protected void onPreExecute() { setListShown(false); } @Override protected Cursor doInBackground(String... params) { String selection = Direction.AGENCY + " = ? AND " + Direction.TAG + " = ?"; String[] selecitonArgs = { agencyTag, directionTag }; Cursor cursor = activity.getContentResolver().query(Direction.CONTENT_URI, new String[] { Direction.STOPS }, selection, selecitonArgs, null); cursor.moveToFirst(); String stopStr = cursor.getString(0); String[] stopTags = stopStr.split(","); String stopSelection = Stop.AGENCY + " = ? AND " + Stop.TAG + " IN (" + StringUtils.join(stopTags, ",", "\"") + ")"; String[] stopSelecitonArgs = { agencyTag }; Cursor stopsCursor = activity.getContentResolver().query(Stop.CONTENT_URI, null, stopSelection, stopSelecitonArgs, null); return stopsCursor; } @Override 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(Stop.CONTENT_URI, id), new String[] { Stop.TAG }, null, null, null); String tag = null; if (cursor.moveToFirst()) { tag = cursor.getString(0); } if (tag != null) { mListener.stopSelected(tag); } } public static interface Listener { void stopSelected(String tag, String directionTag, String routeTag); void stopSelected(String tag); } }