/[projects]/android/TrainInfo/src/dk/thoerup/traininfo/DepartureList.java
ViewVC logotype

Annotation of /android/TrainInfo/src/dk/thoerup/traininfo/DepartureList.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 630 - (hide annotations) (download)
Wed Mar 17 15:27:11 2010 UTC (14 years, 2 months ago) by torben
File size: 5992 byte(s)
Catch exceptions
1 torben 237 package dk.thoerup.traininfo;
2    
3     import java.text.NumberFormat;
4 torben 257 import java.util.ArrayList;
5 torben 237 import java.util.List;
6    
7 torben 336 import android.app.AlertDialog;
8 torben 237 import android.app.Dialog;
9     import android.app.ListActivity;
10     import android.app.ProgressDialog;
11 torben 336 import android.content.DialogInterface;
12 torben 237 import android.content.Intent;
13 torben 239 import android.net.Uri;
14 torben 237 import android.os.AsyncTask;
15     import android.os.Bundle;
16 torben 630 import android.util.Log;
17 torben 237 import android.view.View;
18     import android.widget.ListView;
19     import android.widget.TextView;
20 torben 255 import dk.thoerup.traininfo.provider.DepartureProvider;
21 torben 253 import dk.thoerup.traininfo.provider.ProviderFactory;
22 torben 245 import dk.thoerup.traininfo.util.MessageBox;
23 torben 575 import static dk.thoerup.traininfo.R.string.*;
24 torben 237
25     public class DepartureList extends ListActivity {
26    
27     public static final int DLG_PROGRESS = 1;
28    
29 torben 362
30 torben 237 DepartureListAdapter adapter;
31     DepartureProvider provider;
32     List<DepartureBean> departures;
33    
34 torben 257 int selectedItemId;
35     //DepartureBean currentDeparture;
36 torben 237
37     ProgressDialog pgDialog;
38 torben 362
39 torben 238 DepartureFetcher fetcher;
40 torben 557
41     StationBean station;
42 torben 238
43 torben 257 @SuppressWarnings("unchecked")
44 torben 237 @Override
45     protected void onCreate(Bundle savedInstanceState) {
46     super.onCreate(savedInstanceState);
47     setContentView(R.layout.departurelist);
48    
49     adapter = new DepartureListAdapter(this);
50     setListAdapter(adapter);
51    
52     Intent launchedBy = getIntent();
53 torben 557
54     station = (StationBean) launchedBy.getSerializableExtra("stationbean");
55 torben 239
56 torben 557 ((TextView) findViewById(R.id.stationName)).setText( station.getName() );
57 torben 317
58 torben 557
59     ((TextView) findViewById(R.id.stationAddr)).setText( station.getAddress() );
60 torben 237
61 torben 294
62 torben 239 findViewById(R.id.header).setOnClickListener( mapLauncher );
63 torben 237
64     NumberFormat format = NumberFormat.getNumberInstance();
65     format.setMaximumFractionDigits(1);
66     format.setMinimumFractionDigits(1);
67 torben 557
68    
69     int distance = station.getDistance();
70 torben 237 ((TextView) findViewById(R.id.stationDistance)).setText( format.format((double)distance/1000.0) + " km." );
71 torben 575
72 torben 552
73 torben 557 if (station.isRegional() == false && station.isSTrain() == false) {
74 torben 552 getListView().setVisibility( View.GONE );
75     findViewById(R.id.metroonly).setVisibility( View.VISIBLE );
76    
77 torben 257 } else {
78 torben 552 provider = ProviderFactory.getDepartureProvider();
79    
80     if (savedInstanceState == null) {
81     startDepartureFetcher();
82     } else {
83     departures = (List<DepartureBean>) savedInstanceState.getSerializable("departures");
84     adapter.setDepartures(departures);
85     selectedItemId = savedInstanceState.getInt("selectedItemId");
86     }
87 torben 257 }
88 torben 237 }
89    
90 torben 243 @Override
91     public void onSaveInstanceState(Bundle outState)
92     {
93 torben 257 if (pgDialog != null && pgDialog.isShowing())
94     dismissDialog(DLG_PROGRESS);
95 torben 362
96 torben 257 outState.putInt("selectedItemId", selectedItemId);
97    
98     outState.putSerializable("departures", (ArrayList<DepartureBean>) departures);
99 torben 243 }
100    
101 torben 237 @Override
102     protected void onListItemClick(ListView l, View v, int position, long id) {
103     super.onListItemClick(l, v, position, id);
104 torben 362
105     selectedItemId = position;
106 torben 364
107     DepartureBean dep = departures.get(selectedItemId);
108 torben 237
109 torben 362 Intent intent = new Intent(this, TimetableList.class);
110 torben 364 intent.putExtra("departure", dep);
111 torben 362
112     startActivity(intent);
113    
114 torben 237 }
115    
116    
117     @Override
118     protected void onPrepareDialog(int id, Dialog dialog) {
119     super.onPrepareDialog(id, dialog);
120 torben 257
121 torben 237 switch (id) {
122     case DLG_PROGRESS:
123     pgDialog = (ProgressDialog) dialog;
124     break;
125     }
126     }
127    
128     @Override
129     protected Dialog onCreateDialog(int id) {
130     switch (id) {
131     case DLG_PROGRESS:
132     ProgressDialog dlg = new ProgressDialog(this);
133 torben 561 dlg.setMessage( getString(departurelist_fetchdata) );
134 torben 237 dlg.setCancelable(true);
135 torben 362 return dlg;
136 torben 237 default:
137     return super.onCreateDialog(id);
138     }
139     }
140 torben 336
141     void startDepartureFetcher() {
142     showDialog(DLG_PROGRESS);
143     fetcher = new DepartureFetcher();
144 torben 557 fetcher.execute(station.getId());
145 torben 336 }
146 torben 316
147 torben 237 class DialogDismisser implements View.OnClickListener {
148    
149     Dialog dlg;
150     public DialogDismisser(Dialog d) {
151     dlg = d;
152     }
153    
154     @Override
155     public void onClick(View v) {
156     if (dlg.isShowing())
157     dlg.dismiss();
158 torben 365 }
159     }
160 torben 238
161 torben 239 View.OnClickListener mapLauncher = new View.OnClickListener() {
162     @Override
163 torben 557 public void onClick(View v) {
164     Uri uri = Uri.parse("geo:" + station.getLatitude() + "," + station.getLongitude());
165 torben 239 startActivity( new Intent(Intent.ACTION_VIEW, uri));
166     }
167     };
168 torben 336
169    
170 torben 238
171 torben 310 class DepartureFetcher extends AsyncTask<Integer, Void, Void> {
172 torben 238
173 torben 319 boolean success;
174 torben 365
175 torben 238 @Override
176     protected void onPostExecute(Void result) {
177     super.onPostExecute(result);
178    
179 torben 336
180 torben 238 pgDialog.dismiss();
181    
182 torben 319 if (success) {
183 torben 336 adapter.setDepartures(departures);
184 torben 319 if (departures.size() == 0) {
185     MessageBox.showMessage(DepartureList.this, "No departures found");
186     }
187     } else { // communication or parse error
188 torben 336 AlertDialog.Builder builder = new AlertDialog.Builder(DepartureList.this);
189     builder.setMessage("Error finding departures");
190     builder.setCancelable(true);
191 torben 561 builder.setPositiveButton(getString(generic_retry), new DialogInterface.OnClickListener() {
192 torben 336 public void onClick(DialogInterface dialog, int id) {
193     dialog.dismiss();
194     startDepartureFetcher();
195    
196     }
197     });
198 torben 561 builder.setNegativeButton(getString(generic_cancel), new DialogInterface.OnClickListener() {
199 torben 336 public void onClick(DialogInterface dialog, int id) {
200     dialog.dismiss();
201     }
202 torben 630 });
203    
204     try {
205     builder.show();
206     } catch (android.view.WindowManager.BadTokenException e) {
207     Log.i("DepartureList", "BadTokenException"); // this can happen if the user switched away from this activity, while doInBackground was running
208     }
209 torben 319 }
210 torben 238 }
211    
212     @Override
213 torben 310 protected Void doInBackground(Integer... params) {
214 torben 319 success = provider.lookupDepartures(params[0]);
215     departures = provider.getDepartures(params[0]);
216 torben 238 return null;
217     }
218    
219     }
220 torben 237 }

  ViewVC Help
Powered by ViewVC 1.1.20