/[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 365 - (hide annotations) (download)
Wed Sep 30 09:14:27 2009 UTC (14 years, 8 months ago) by torben
File size: 5633 byte(s)
First workable version with timetable feature
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 316 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 237
24     public class DepartureList extends ListActivity {
25    
26     public static final int DLG_PROGRESS = 1;
27    
28 torben 362
29 torben 237 DepartureListAdapter adapter;
30     DepartureProvider provider;
31     List<DepartureBean> departures;
32    
33 torben 257 int selectedItemId;
34     //DepartureBean currentDeparture;
35 torben 237
36     ProgressDialog pgDialog;
37 torben 362
38 torben 238 DepartureFetcher fetcher;
39 torben 336 int stationId;
40 torben 238
41 torben 239 double latitude,longitude;
42    
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 239
54     latitude = launchedBy.getDoubleExtra("latitude", 0.0);
55     longitude = launchedBy.getDoubleExtra("longitude", 0.0);
56    
57 torben 237 String name = launchedBy.getStringExtra("name");
58     ((TextView) findViewById(R.id.stationName)).setText( name );
59 torben 317
60     String address = launchedBy.getStringExtra("address");
61     ((TextView) findViewById(R.id.stationAddr)).setText( address );
62 torben 237
63 torben 336 stationId = launchedBy.getIntExtra("stationid", -1);
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     int distance = launchedBy.getIntExtra("distance", 0);
71     ((TextView) findViewById(R.id.stationDistance)).setText( format.format((double)distance/1000.0) + " km." );
72    
73 torben 238
74 torben 253 provider = ProviderFactory.getDepartureProvider();
75 torben 238
76 torben 257 if (savedInstanceState == null) {
77 torben 336 startDepartureFetcher();
78 torben 257 } else {
79     departures = (List<DepartureBean>) savedInstanceState.getSerializable("departures");
80     adapter.setDepartures(departures);
81     selectedItemId = savedInstanceState.getInt("selectedItemId");
82     }
83 torben 237 }
84    
85 torben 243 @Override
86     public void onSaveInstanceState(Bundle outState)
87     {
88 torben 257 if (pgDialog != null && pgDialog.isShowing())
89     dismissDialog(DLG_PROGRESS);
90 torben 362
91 torben 257 outState.putInt("selectedItemId", selectedItemId);
92    
93     outState.putSerializable("departures", (ArrayList<DepartureBean>) departures);
94 torben 243 }
95    
96 torben 237 @Override
97     protected void onListItemClick(ListView l, View v, int position, long id) {
98     super.onListItemClick(l, v, position, id);
99 torben 362
100     selectedItemId = position;
101 torben 364
102     DepartureBean dep = departures.get(selectedItemId);
103 torben 237
104 torben 362 Intent intent = new Intent(this, TimetableList.class);
105 torben 364 intent.putExtra("departure", dep);
106 torben 362
107     startActivity(intent);
108    
109 torben 237 }
110    
111    
112     @Override
113     protected void onPrepareDialog(int id, Dialog dialog) {
114     super.onPrepareDialog(id, dialog);
115 torben 257
116 torben 237 switch (id) {
117     case DLG_PROGRESS:
118     pgDialog = (ProgressDialog) dialog;
119     break;
120     }
121     }
122    
123     @Override
124     protected Dialog onCreateDialog(int id) {
125     switch (id) {
126     case DLG_PROGRESS:
127     ProgressDialog dlg = new ProgressDialog(this);
128     dlg.setMessage("Fetch departure data");
129     dlg.setCancelable(true);
130 torben 362 return dlg;
131 torben 237 default:
132     return super.onCreateDialog(id);
133     }
134     }
135 torben 336
136     void startDepartureFetcher() {
137     showDialog(DLG_PROGRESS);
138     fetcher = new DepartureFetcher();
139     fetcher.execute(stationId);
140     }
141 torben 316
142 torben 237 class DialogDismisser implements View.OnClickListener {
143    
144     Dialog dlg;
145     public DialogDismisser(Dialog d) {
146     dlg = d;
147     }
148    
149     @Override
150     public void onClick(View v) {
151     if (dlg.isShowing())
152     dlg.dismiss();
153 torben 365 }
154     }
155 torben 238
156 torben 239 View.OnClickListener mapLauncher = new View.OnClickListener() {
157     @Override
158     public void onClick(View v) {
159     Uri uri = Uri.parse("geo:" + latitude + "," + longitude);
160     startActivity( new Intent(Intent.ACTION_VIEW, uri));
161     }
162     };
163 torben 336
164    
165 torben 238
166 torben 310 class DepartureFetcher extends AsyncTask<Integer, Void, Void> {
167 torben 238
168 torben 319 boolean success;
169 torben 365
170 torben 238 @Override
171     protected void onPostExecute(Void result) {
172     super.onPostExecute(result);
173    
174 torben 336
175 torben 238 pgDialog.dismiss();
176    
177 torben 319 if (success) {
178 torben 336 adapter.setDepartures(departures);
179 torben 319 if (departures.size() == 0) {
180     MessageBox.showMessage(DepartureList.this, "No departures found");
181     }
182     } else { // communication or parse error
183 torben 336 AlertDialog.Builder builder = new AlertDialog.Builder(DepartureList.this);
184     builder.setMessage("Error finding departures");
185     builder.setCancelable(true);
186     builder.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
187     public void onClick(DialogInterface dialog, int id) {
188     dialog.dismiss();
189     startDepartureFetcher();
190    
191     }
192     });
193     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
194     public void onClick(DialogInterface dialog, int id) {
195     dialog.dismiss();
196     }
197     });
198     builder.show();
199 torben 319 }
200 torben 238 }
201    
202     @Override
203 torben 310 protected Void doInBackground(Integer... params) {
204 torben 319 success = provider.lookupDepartures(params[0]);
205     departures = provider.getDepartures(params[0]);
206 torben 238 return null;
207     }
208    
209     }
210 torben 237 }

  ViewVC Help
Powered by ViewVC 1.1.20