/[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 572 - (hide annotations) (download)
Mon Feb 1 16:49:02 2010 UTC (14 years, 3 months ago) by torben
File size: 6029 byte(s)
Code.sync: first try at widget
1 torben 237 package dk.thoerup.traininfo;
2    
3 torben 572 import static dk.thoerup.traininfo.R.string.departurelist_fetchdata;
4     import static dk.thoerup.traininfo.R.string.generic_cancel;
5     import static dk.thoerup.traininfo.R.string.generic_retry;
6    
7 torben 237 import java.text.NumberFormat;
8 torben 257 import java.util.ArrayList;
9 torben 237 import java.util.List;
10    
11 torben 336 import android.app.AlertDialog;
12 torben 237 import android.app.Dialog;
13     import android.app.ListActivity;
14     import android.app.ProgressDialog;
15 torben 336 import android.content.DialogInterface;
16 torben 237 import android.content.Intent;
17 torben 239 import android.net.Uri;
18 torben 237 import android.os.AsyncTask;
19     import android.os.Bundle;
20 torben 572 import android.util.Log;
21 torben 237 import android.view.View;
22     import android.widget.ListView;
23     import android.widget.TextView;
24 torben 255 import dk.thoerup.traininfo.provider.DepartureProvider;
25 torben 253 import dk.thoerup.traininfo.provider.ProviderFactory;
26 torben 245 import dk.thoerup.traininfo.util.MessageBox;
27 torben 237
28     public class DepartureList extends ListActivity {
29    
30     public static final int DLG_PROGRESS = 1;
31    
32 torben 362
33 torben 237 DepartureListAdapter adapter;
34     DepartureProvider provider;
35     List<DepartureBean> departures;
36    
37 torben 257 int selectedItemId;
38     //DepartureBean currentDeparture;
39 torben 237
40     ProgressDialog pgDialog;
41 torben 362
42 torben 238 DepartureFetcher fetcher;
43 torben 557
44     StationBean station;
45 torben 238
46 torben 257 @SuppressWarnings("unchecked")
47 torben 237 @Override
48     protected void onCreate(Bundle savedInstanceState) {
49     super.onCreate(savedInstanceState);
50     setContentView(R.layout.departurelist);
51    
52     adapter = new DepartureListAdapter(this);
53     setListAdapter(adapter);
54    
55     Intent launchedBy = getIntent();
56 torben 557
57     station = (StationBean) launchedBy.getSerializableExtra("stationbean");
58 torben 239
59 torben 557 ((TextView) findViewById(R.id.stationName)).setText( station.getName() );
60 torben 317
61 torben 557
62     ((TextView) findViewById(R.id.stationAddr)).setText( station.getAddress() );
63 torben 237
64 torben 294
65 torben 239 findViewById(R.id.header).setOnClickListener( mapLauncher );
66 torben 237
67     NumberFormat format = NumberFormat.getNumberInstance();
68     format.setMaximumFractionDigits(1);
69     format.setMinimumFractionDigits(1);
70 torben 557
71    
72     int distance = station.getDistance();
73 torben 237 ((TextView) findViewById(R.id.stationDistance)).setText( format.format((double)distance/1000.0) + " km." );
74 torben 572 station.setRegional(true);
75     Log.e("ASD", "" + station.isRegional() + "/" + station.isSTrain() + "/" + station.isMetro());
76 torben 552
77 torben 557 if (station.isRegional() == false && station.isSTrain() == false) {
78 torben 552 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 torben 561 dlg.setMessage( getString(departurelist_fetchdata) );
138 torben 237 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 torben 557 fetcher.execute(station.getId());
149 torben 336 }
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 torben 557 public void onClick(View v) {
168     Uri uri = Uri.parse("geo:" + station.getLatitude() + "," + station.getLongitude());
169 torben 239 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 torben 561 builder.setPositiveButton(getString(generic_retry), new DialogInterface.OnClickListener() {
196 torben 336 public void onClick(DialogInterface dialog, int id) {
197     dialog.dismiss();
198     startDepartureFetcher();
199    
200     }
201     });
202 torben 561 builder.setNegativeButton(getString(generic_cancel), new DialogInterface.OnClickListener() {
203 torben 336 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