/[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 742 - (hide annotations) (download)
Wed May 19 16:27:41 2010 UTC (14 years ago) by torben
File size: 6113 byte(s)
Don't show distance to station, unless we really have one
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 torben 557 int distance = station.getDistance();
65 torben 742 if (distance != 0) {
66     NumberFormat format = NumberFormat.getNumberInstance();
67     format.setMaximumFractionDigits(1);
68     format.setMinimumFractionDigits(1);
69 torben 575
70 torben 742 ((TextView) findViewById(R.id.stationDistance)).setText( format.format((double)distance/1000.0) + " km." );
71     } else {
72     ((TextView) findViewById(R.id.stationDistance)).setVisibility(View.GONE);
73     }
74    
75 torben 552
76 torben 557 if (station.isRegional() == false && station.isSTrain() == false) {
77 torben 552 getListView().setVisibility( View.GONE );
78     findViewById(R.id.metroonly).setVisibility( View.VISIBLE );
79    
80 torben 257 } else {
81 torben 552 provider = ProviderFactory.getDepartureProvider();
82    
83     if (savedInstanceState == null) {
84     startDepartureFetcher();
85     } else {
86     departures = (List<DepartureBean>) savedInstanceState.getSerializable("departures");
87     adapter.setDepartures(departures);
88     selectedItemId = savedInstanceState.getInt("selectedItemId");
89     }
90 torben 257 }
91 torben 237 }
92    
93 torben 243 @Override
94     public void onSaveInstanceState(Bundle outState)
95     {
96 torben 257 if (pgDialog != null && pgDialog.isShowing())
97     dismissDialog(DLG_PROGRESS);
98 torben 362
99 torben 257 outState.putInt("selectedItemId", selectedItemId);
100    
101     outState.putSerializable("departures", (ArrayList<DepartureBean>) departures);
102 torben 243 }
103    
104 torben 237 @Override
105     protected void onListItemClick(ListView l, View v, int position, long id) {
106     super.onListItemClick(l, v, position, id);
107 torben 362
108     selectedItemId = position;
109 torben 364
110     DepartureBean dep = departures.get(selectedItemId);
111 torben 237
112 torben 362 Intent intent = new Intent(this, TimetableList.class);
113 torben 364 intent.putExtra("departure", dep);
114 torben 362
115     startActivity(intent);
116    
117 torben 237 }
118    
119    
120     @Override
121     protected void onPrepareDialog(int id, Dialog dialog) {
122     super.onPrepareDialog(id, dialog);
123 torben 257
124 torben 237 switch (id) {
125     case DLG_PROGRESS:
126     pgDialog = (ProgressDialog) dialog;
127     break;
128     }
129     }
130    
131     @Override
132     protected Dialog onCreateDialog(int id) {
133     switch (id) {
134     case DLG_PROGRESS:
135     ProgressDialog dlg = new ProgressDialog(this);
136 torben 561 dlg.setMessage( getString(departurelist_fetchdata) );
137 torben 237 dlg.setCancelable(true);
138 torben 362 return dlg;
139 torben 237 default:
140     return super.onCreateDialog(id);
141     }
142     }
143 torben 336
144     void startDepartureFetcher() {
145     showDialog(DLG_PROGRESS);
146     fetcher = new DepartureFetcher();
147 torben 557 fetcher.execute(station.getId());
148 torben 336 }
149 torben 316
150 torben 237 class DialogDismisser implements View.OnClickListener {
151    
152     Dialog dlg;
153     public DialogDismisser(Dialog d) {
154     dlg = d;
155     }
156    
157     @Override
158     public void onClick(View v) {
159     if (dlg.isShowing())
160     dlg.dismiss();
161 torben 365 }
162     }
163 torben 238
164 torben 239 View.OnClickListener mapLauncher = new View.OnClickListener() {
165     @Override
166 torben 557 public void onClick(View v) {
167     Uri uri = Uri.parse("geo:" + station.getLatitude() + "," + station.getLongitude());
168 torben 239 startActivity( new Intent(Intent.ACTION_VIEW, uri));
169     }
170     };
171 torben 336
172    
173 torben 238
174 torben 310 class DepartureFetcher extends AsyncTask<Integer, Void, Void> {
175 torben 238
176 torben 319 boolean success;
177 torben 365
178 torben 238 @Override
179     protected void onPostExecute(Void result) {
180     super.onPostExecute(result);
181    
182 torben 336
183 torben 238 pgDialog.dismiss();
184    
185 torben 319 if (success) {
186 torben 336 adapter.setDepartures(departures);
187 torben 319 if (departures.size() == 0) {
188     MessageBox.showMessage(DepartureList.this, "No departures found");
189     }
190     } else { // communication or parse error
191 torben 336 AlertDialog.Builder builder = new AlertDialog.Builder(DepartureList.this);
192     builder.setMessage("Error finding departures");
193     builder.setCancelable(true);
194 torben 561 builder.setPositiveButton(getString(generic_retry), new DialogInterface.OnClickListener() {
195 torben 336 public void onClick(DialogInterface dialog, int id) {
196     dialog.dismiss();
197     startDepartureFetcher();
198    
199     }
200     });
201 torben 561 builder.setNegativeButton(getString(generic_cancel), new DialogInterface.OnClickListener() {
202 torben 336 public void onClick(DialogInterface dialog, int id) {
203     dialog.dismiss();
204     }
205 torben 630 });
206    
207     try {
208     builder.show();
209     } catch (android.view.WindowManager.BadTokenException e) {
210     Log.i("DepartureList", "BadTokenException"); // this can happen if the user switched away from this activity, while doInBackground was running
211     }
212 torben 319 }
213 torben 238 }
214    
215     @Override
216 torben 310 protected Void doInBackground(Integer... params) {
217 torben 319 success = provider.lookupDepartures(params[0]);
218     departures = provider.getDepartures(params[0]);
219 torben 238 return null;
220     }
221    
222     }
223 torben 237 }

  ViewVC Help
Powered by ViewVC 1.1.20