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

  ViewVC Help
Powered by ViewVC 1.1.20