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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1066 - (hide annotations) (download)
Thu Sep 16 15:32:42 2010 UTC (13 years, 8 months ago) by torben
File size: 6112 byte(s)
Experimental #5, update TrainInfo client to use common data-beans
1 torben 362 package dk.thoerup.traininfo;
2    
3 torben 365
4 torben 630 import static dk.thoerup.traininfo.R.string.generic_cancel;
5     import static dk.thoerup.traininfo.R.string.generic_retry;
6     import static dk.thoerup.traininfo.R.string.timetablelist_fetchdata;
7     import static dk.thoerup.traininfo.R.string.timetablelist_fetcherror;
8     import static dk.thoerup.traininfo.R.string.timetablelist_nodata;
9 torben 365 import android.app.AlertDialog;
10     import android.app.Dialog;
11 torben 839 import android.app.ListActivity;
12 torben 365 import android.app.ProgressDialog;
13     import android.content.DialogInterface;
14 torben 364 import android.content.Intent;
15 torben 365 import android.os.AsyncTask;
16 torben 362 import android.os.Bundle;
17 torben 630 import android.util.Log;
18 torben 840 import android.view.View;
19     import android.widget.ListView;
20 torben 362 import android.widget.TextView;
21 torben 1066 import dk.thoerup.android.traininfo.common.DepartureEntry;
22     import dk.thoerup.android.traininfo.common.TimetableBean;
23     import dk.thoerup.android.traininfo.common.TimetableEntry;
24     import dk.thoerup.android.traininfo.common.StationBean.StationEntry;
25 torben 365 import dk.thoerup.traininfo.provider.ProviderFactory;
26     import dk.thoerup.traininfo.provider.TimetableProvider;
27     import dk.thoerup.traininfo.util.MessageBox;
28 torben 362
29 torben 839 public class TimetableList extends ListActivity {
30 torben 364
31 torben 365 private static final int DLG_PROGRESS = 8000;
32 torben 981 DepartureEntry departure;
33 torben 365 TimetableListAdapter adapter;
34     TimetableFetcher fetcher;
35 torben 1066 TimetableBean timetables;
36 torben 1017 int commFailCounter = 0;
37 torben 364
38 torben 365 TimetableProvider provider;
39    
40     @SuppressWarnings("unchecked")
41 torben 362 @Override
42     protected void onCreate(Bundle savedInstanceState) {
43     super.onCreate(savedInstanceState);
44     setContentView(R.layout.timetablelist);
45 torben 364
46 torben 365 provider = ProviderFactory.getTimetableProvider();
47    
48 torben 839 adapter = new TimetableListAdapter(this);
49     setListAdapter(adapter);
50 torben 366
51 torben 839
52 torben 366
53 torben 364 Intent launchedBy = getIntent();
54 torben 981 departure = (DepartureEntry) launchedBy.getSerializableExtra("departure");
55 torben 364
56     ((TextView)findViewById(R.id.Train)).setText(departure.getTrainNumber());
57     ((TextView)findViewById(R.id.Status)).setText(departure.getStatus());
58 torben 398 ((TextView)findViewById(R.id.Location)).setText(departure.getLocation());
59 torben 364 ((TextView)findViewById(R.id.Note)).setText(departure.getNote());
60 torben 1066 ((TextView)findViewById(R.id.Updated)).setText( getLastUpdateString( departure.getUpdated() ));
61 torben 366
62 torben 1066
63 torben 1028 ProviderFactory.purgeOldEntries(); //cleanup before fetching more data
64 torben 365
65     if (savedInstanceState == null) {
66     startTimetableFetcher();
67     } else {
68 torben 1066 timetables = (TimetableBean) savedInstanceState.getSerializable("timetables");
69 torben 365 adapter.setTimetable(timetables);
70     }
71 torben 362 }
72 torben 918
73     @Override
74     protected void onDestroy() {
75     super.onDestroy();
76    
77     if (fetcher != null) {
78     fetcher.cancel(true);
79     }
80     }
81 torben 365
82 torben 840 @Override
83     protected void onListItemClick(ListView l, View v, int position, long id) {
84     super.onListItemClick(l, v, position, id);
85    
86 torben 1066 TimetableEntry tt = timetables.entries.get(position);
87 torben 840
88 torben 1066 StationEntry station = new StationEntry();
89 torben 840 station.setName( tt.getStation() );
90     station.setId( tt.getStationId() );
91 torben 1066 station.setIsRegional(true);
92 torben 840
93 torben 1066
94 torben 840 Intent intent = new Intent(this, DepartureList.class);
95     intent.putExtra("stationbean", station);
96     startActivity(intent);
97    
98     }
99    
100    
101    
102     @Override
103 torben 365 public void onSaveInstanceState(Bundle outState)
104     {
105     dismissDialog(DLG_PROGRESS);
106 torben 1066 outState.putSerializable("timetables", (TimetableBean) timetables);
107 torben 365 }
108 torben 364
109 torben 365
110     @Override
111     protected void onPrepareDialog(int id, Dialog dialog) {
112     super.onPrepareDialog(id, dialog);
113    
114     switch (id) {
115     case DLG_PROGRESS:
116     //pgDialog = (ProgressDialog) dialog;
117     break;
118     }
119     }
120    
121     @Override
122     protected Dialog onCreateDialog(int id) {
123     switch (id) {
124     case DLG_PROGRESS:
125 torben 561 ProgressDialog dlg = new ProgressDialog(this);
126     dlg.setMessage( getString(timetablelist_fetchdata) );
127 torben 365 dlg.setCancelable(true);
128     return dlg;
129     default:
130     return super.onCreateDialog(id);
131     }
132     }
133    
134     void startTimetableFetcher() {
135     showDialog(DLG_PROGRESS);
136     fetcher = new TimetableFetcher();
137 torben 699 fetcher.execute(departure.getType(), departure.getTrainNumber());
138 torben 365 }
139    
140 torben 1066
141     public String getLastUpdateString(int lastUpdate) {
142     String minutes = this.getString(R.string.departurebean_minutes);
143     String unknown = this.getString(R.string.departurebean_unknown);
144     switch (lastUpdate) {
145     case 1:
146     return "<3 " + minutes;
147     case 2:
148     return "3-10 " + minutes;
149     case 3:
150     return ">3 " + minutes;
151     case 4:
152     return unknown;
153     default:
154     return "";
155     }
156     }
157    
158    
159 torben 365 class TimetableFetcher extends AsyncTask<String,Void,Void> {
160    
161    
162     @Override
163     protected void onPostExecute(Void result) {
164     super.onPostExecute(result);
165     dismissDialog(DLG_PROGRESS);
166    
167    
168 torben 1007 if (timetables != null) {
169 torben 1017 commFailCounter = 0;
170 torben 917 TimetableList.this.getListView().invalidateViews();
171 torben 365 adapter.setTimetable(timetables);
172 torben 1066 if (timetables.entries.size() == 0) {
173 torben 906 MessageBox.showMessage(TimetableList.this, getString(timetablelist_nodata), true);
174 torben 365 }
175     } else { // communication or parse error
176 torben 1017 commFailCounter++;
177 torben 365 AlertDialog.Builder builder = new AlertDialog.Builder(TimetableList.this);
178 torben 561 builder.setMessage(getString(timetablelist_fetcherror));
179 torben 365 builder.setCancelable(true);
180 torben 1017 if (commFailCounter < 3) {
181     builder.setPositiveButton(getString(generic_retry), new DialogInterface.OnClickListener() {
182     public void onClick(DialogInterface dialog, int id) {
183     dialog.dismiss();
184     startTimetableFetcher();
185    
186     }
187     });
188     }
189 torben 561 builder.setNegativeButton(getString(generic_cancel), new DialogInterface.OnClickListener() {
190 torben 365 public void onClick(DialogInterface dialog, int id) {
191     dialog.dismiss();
192 torben 843 TimetableList.this.finish();
193 torben 365 }
194 torben 630 });
195    
196     try {
197     builder.show();
198     } catch (android.view.WindowManager.BadTokenException e) {
199     Log.i("TimetableList", "BadTokenException"); // this can happen if the user switched away from this activity, while doInBackground was running
200     }
201    
202 torben 365 }
203    
204     }
205    
206     @Override
207     protected Void doInBackground(String... arg0) {
208 torben 699 String type = arg0[0];
209     String trainID = arg0[1];
210 torben 1007 timetables = provider.lookupTimetable(type, trainID);
211 torben 365
212     return null;
213     }
214    
215     }
216 torben 362 }

  ViewVC Help
Powered by ViewVC 1.1.20