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

Annotation of /android/TrainInfo/src/main/java/dk/thoerup/traininfo/WelcomeScreen.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2469 - (hide annotations) (download)
Fri Mar 20 21:36:47 2015 UTC (9 years, 2 months ago) by torben
File size: 8232 byte(s)
gradle
1 torben 481 package dk.thoerup.traininfo;
2    
3 torben 1548
4    
5 torben 1555 import java.io.InvalidClassException;
6    
7 torben 481 import android.app.Activity;
8 torben 1547 import android.app.ProgressDialog;
9 torben 481 import android.content.Intent;
10 torben 1547 import android.content.SharedPreferences;
11     import android.content.SharedPreferences.Editor;
12     import android.os.AsyncTask;
13 torben 481 import android.os.Bundle;
14 torben 743 import android.os.Handler;
15 torben 1159 import android.util.Log;
16 torben 1548 import android.view.Menu;
17     import android.view.MenuItem;
18 torben 481 import android.view.View;
19 torben 1547 import android.view.View.OnClickListener;
20 torben 482 import android.view.Window;
21 torben 481 import android.widget.Button;
22 torben 1547 import android.widget.Toast;
23 torben 481
24 torben 720 import com.nullwire.trace.ExceptionHandler;
25    
26 torben 1131 import dk.thoerup.androidutils.CheckUpdates;
27 torben 1547 import dk.thoerup.traininfo.provider.OfflineStationProvider;
28 torben 1159 import dk.thoerup.traininfo.provider.ProviderFactory;
29 torben 1547 import dk.thoerup.traininfo.provider.StationProvider;
30 torben 720
31 torben 1551
32 torben 481 public class WelcomeScreen extends Activity{
33 torben 1547
34     final static String stationsreload = "stationsreload";
35 torben 1548 final static int MENU_SETTINGS = 1;
36     final static int MENU_RELOAD = 2;
37 torben 1547
38 torben 1548
39 torben 481 public enum ListType {
40     ListNearest,
41     ListSearch,
42     ListFavorites
43     }
44    
45 torben 2123
46 torben 743 Handler handler = new Handler();
47    
48 torben 1547 SharedPreferences prefs;
49    
50 torben 1567 StationLoader stationLoader;
51    
52 torben 481 @Override
53     public void onCreate(Bundle savedInstanceState) {
54 torben 916
55     super.onCreate(savedInstanceState);
56 torben 1547
57     prefs = getSharedPreferences("TrainStation", 0);
58    
59 torben 482 requestWindowFeature( Window.FEATURE_NO_TITLE );
60 torben 481 setContentView(R.layout.welcome);
61    
62     Button nearestButton = (Button) findViewById(R.id.nearest);
63     nearestButton.setOnClickListener( new StationListListener(ListType.ListNearest));
64    
65     Button searchButton = (Button) findViewById(R.id.search);
66     searchButton.setOnClickListener( new StationListListener(ListType.ListSearch));
67    
68     Button favoritesButton = (Button) findViewById(R.id.favorites);
69     favoritesButton.setOnClickListener( new StationListListener(ListType.ListFavorites));
70    
71     Button aboutButton = (Button) findViewById(R.id.about);
72     aboutButton.setOnClickListener( new AboutListener() );
73 torben 1714
74     //Got stacktraces / reports that the register thing sometimes crashes
75     try {
76     ExceptionHandler.register(this, "http://t-hoerup.dk/android/trace.php");
77     } catch (Exception e) {
78     Log.e("TrainInfo", "Error registering exception handler", e);
79     }
80 torben 568
81 torben 720 CheckUpdates update = new CheckUpdates();
82 torben 911 update.checkForUpdates(this, "http://t-hoerup.dk/android/traininfo/version.txt", "TrainInfo DK", null);
83 torben 846 /*
84 torben 743 Runnable r = new Runnable() {
85     @Override
86     public void run() {
87     View splash = findViewById(R.id.splash);
88     splash.setVisibility(View.GONE);
89     }
90     };
91     handler.postDelayed(r, 1500);
92 torben 846 */
93 torben 1547
94     StationProvider sp = ProviderFactory.getStationProvider();
95    
96     if (sp instanceof OfflineStationProvider ) {
97     OfflineStationProvider osp = (OfflineStationProvider) sp;
98 torben 1555 long last = prefs.getLong(stationsreload, 0);
99     long now = System.currentTimeMillis();
100     Log.i("TrainInfo", "Last Load: " + last);
101 torben 1626
102     boolean didLoad = false;
103    
104     try {
105     didLoad = osp.loadStations(this);
106     }
107     catch (InvalidClassException e) {
108     Log.i("TrainInfo", "invalid class - do a new download of stationlist");
109     }
110     catch (Exception e) {
111     Toast.makeText(this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
112     Log.e("TrainInfo", "load error", e);
113     }
114    
115     if (didLoad == false) {
116     stationLoader = new StationLoader(osp, false);
117 torben 1567 stationLoader.execute( (Void)null);
118 torben 1555 } else {
119 torben 1626 if ( (now-last) > (14*24*60*60*1000) ) { //if we had a stations list but it was too old, load a new one silent
120     Log.i("TrainInfo", "Stationlist too old, do a silent download");
121     stationLoader = new StationLoader(osp, true);
122 torben 1567 stationLoader.execute( (Void)null);
123 torben 1547 }
124     }
125 torben 1555
126 torben 1547 }
127 torben 2123
128    
129 torben 481 }
130 torben 2123
131 torben 1626
132    
133 torben 1159 @Override
134     protected void onDestroy() {
135     super.onDestroy();
136 torben 1567 if (stationLoader != null) {
137 torben 1594 stationLoader.cancel(true);
138 torben 2123 stationLoader = null;
139 torben 2124 }
140 torben 1567
141 torben 1159 ProviderFactory.purgeOldEntries(); //exiting application, do some cleanup
142     }
143    
144    
145 torben 1548 @Override
146     public boolean onCreateOptionsMenu(Menu menu) {
147     MenuItem item;
148    
149     item = menu.add(0, MENU_SETTINGS, 0, getString(R.string.welcome_settings) );
150     item.setIcon(android.R.drawable.ic_menu_preferences);
151    
152     item = menu.add(0, MENU_RELOAD, 0, getString(R.string.welcome_reloadstations));
153     item.setIcon(android.R.drawable.ic_menu_rotate);
154    
155     return true;
156     }
157    
158     @Override
159     public boolean onOptionsItemSelected(MenuItem item) {
160     boolean retval = true;
161    
162     switch (item.getItemId()) {
163     case MENU_SETTINGS:
164     Intent intent = new Intent(WelcomeScreen.this, SettingsScreen.class);
165     WelcomeScreen.this.startActivity(intent);
166     break;
167    
168     case MENU_RELOAD:
169     OfflineStationProvider osp = (OfflineStationProvider) ProviderFactory.getStationProvider();
170 torben 1626 new StationLoader(osp, false).execute( (Void)null);
171 torben 1548 break;
172    
173     default:
174     retval = super.onOptionsItemSelected(item);
175     }
176    
177     return retval;
178     }
179    
180 torben 1159
181 torben 481 class AboutListener implements OnClickListener {
182    
183     @Override
184     public void onClick(View v) {
185 torben 500 /*
186 torben 484 String appName = WelcomeScreen.this.getResources().getString(R.string.app_name);
187     String ver = WelcomeScreen.this.getResources().getString(R.string.app_version);
188    
189 torben 483 StringBuffer message = new StringBuffer();
190 torben 484 message.append(appName);
191     message.append(" v").append(ver).append("\n");
192 torben 483 message.append("By Torben H. Nielsen\n");
193    
194 torben 500 MessageBox.showMessage(WelcomeScreen.this, message.toString());*/
195 torben 1638 /*Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://t-hoerup.dk/android/traininfo/"));
196     startActivity(browserIntent);*/
197    
198     Intent intent = new Intent(WelcomeScreen.this, AboutScreen.class);
199     WelcomeScreen.this.startActivity(intent);
200 torben 481 }
201 torben 483
202 torben 481 }
203 torben 1446
204 torben 483
205 torben 481 class StationListListener implements OnClickListener{
206     ListType launchType;
207     StationListListener(ListType type) {
208     launchType = type;
209     }
210    
211     @Override
212     public void onClick(View v) {
213 torben 1572
214     StationProvider sp = ProviderFactory.getStationProvider();
215    
216     if (sp instanceof OfflineStationProvider ) {
217     OfflineStationProvider osp = (OfflineStationProvider) sp;
218    
219     if (! osp.hasStations()) {
220 torben 1626 stationLoader = new StationLoader(osp, false);
221 torben 1572 stationLoader.execute( (Void)null);
222     return;
223     }
224     }
225    
226 torben 481 Intent intent = new Intent(WelcomeScreen.this, StationList.class);
227     intent.putExtra("type", launchType);
228     WelcomeScreen.this.startActivity(intent);
229     }
230    
231     }
232 torben 1547
233     class StationLoader extends AsyncTask<Void,Void,Void> {
234    
235    
236     boolean succeeded;
237     ProgressDialog dlg;
238     OfflineStationProvider osp;
239 torben 1550 String exMsg;
240 torben 1626 boolean silent;
241 torben 1547
242 torben 1626 public StationLoader(OfflineStationProvider osp, boolean silent) {
243 torben 1547 this.osp = osp;
244 torben 1626 this.silent = silent;
245 torben 1547 }
246    
247     @Override
248     protected Void doInBackground(Void... params) {
249     try {
250     osp.downloadStations( WelcomeScreen.this );
251     succeeded = true;
252     } catch (Exception e) {
253     succeeded = false;
254 torben 1626 exMsg = e.getMessage();
255     Log.e("TrainInfo", "download error", e);
256 torben 1547 }
257     return null;
258     }
259    
260 torben 1565
261 torben 1547 @Override
262     protected void onPreExecute() {
263     super.onPreExecute();
264 torben 1626 Log.i("TrainInfo", "StationLoader.onPreExecute() ");
265 torben 1547
266 torben 1626 if (silent == false) {
267     dlg = new ProgressDialog(WelcomeScreen.this);
268     dlg.setMessage( getText(R.string.welcome_downloadingstations) );
269     dlg.setCancelable(false);
270     dlg.show();
271     }
272 torben 1547 }
273    
274     @Override
275     protected void onPostExecute(Void result) {
276     super.onPostExecute(result);
277 torben 1626 Log.i("TrainInfo", "StationLoader.onPostExecute() ");
278 torben 1547
279 torben 1626 if (silent == false) {
280 torben 1718 try {
281     dlg.dismiss();
282     } catch (Exception e) {
283     Log.e("TrainInfo", "Exception while closing dialog", e); // don't crash program
284     }
285 torben 1626 dlg = null;
286     }
287 torben 1547
288     if (succeeded) {
289     Editor edit = prefs.edit();
290     edit.putLong(stationsreload, System.currentTimeMillis() );
291     edit.commit();
292 torben 1550 } else {
293 torben 1626 if (silent == false) {
294     Toast.makeText(WelcomeScreen.this, "Error " + exMsg, Toast.LENGTH_LONG).show();
295     }
296 torben 1547 }
297     }
298     }
299    
300 torben 481 }

  ViewVC Help
Powered by ViewVC 1.1.20