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

Diff of /android/TrainInfo/src/dk/thoerup/traininfo/WelcomeScreen.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 484 by torben, Thu Oct 29 11:38:58 2009 UTC revision 1718 by torben, Mon Mar 12 09:27:14 2012 UTC
# Line 1  Line 1 
1  package dk.thoerup.traininfo;  package dk.thoerup.traininfo;
2    
3  import dk.thoerup.traininfo.util.MessageBox;  
4    
5    import java.io.InvalidClassException;
6    
7  import android.app.Activity;  import android.app.Activity;
8    import android.app.ProgressDialog;
9  import android.content.Intent;  import android.content.Intent;
10    import android.content.SharedPreferences;
11    import android.content.SharedPreferences.Editor;
12    import android.net.Uri;
13    import android.os.AsyncTask;
14  import android.os.Bundle;  import android.os.Bundle;
15    import android.os.Handler;
16    import android.util.Log;
17    import android.view.Menu;
18    import android.view.MenuItem;
19  import android.view.View;  import android.view.View;
 import android.view.Window;  
20  import android.view.View.OnClickListener;  import android.view.View.OnClickListener;
21    import android.view.Window;
22  import android.widget.Button;  import android.widget.Button;
23    import android.widget.Toast;
24    
25    import com.nullwire.trace.ExceptionHandler;
26    
27    import dk.thoerup.androidutils.CheckUpdates;
28    import dk.thoerup.traininfo.provider.OfflineStationProvider;
29    import dk.thoerup.traininfo.provider.ProviderFactory;
30    import dk.thoerup.traininfo.provider.StationProvider;
31    
32    
33  public class WelcomeScreen extends Activity{  public class WelcomeScreen extends Activity{
34            
35            final static String stationsreload = "stationsreload";
36            final static int MENU_SETTINGS = 1;
37            final static int MENU_RELOAD = 2;
38            
39            
40          public enum ListType {          public enum ListType {
41                  ListNearest,                  ListNearest,
42                  ListSearch,                  ListSearch,
43                  ListFavorites                  ListFavorites
44          }          }
45                    
46            Handler handler = new Handler();
47            
48            SharedPreferences prefs;
49            
50            StationLoader stationLoader;
51            
52          @Override          @Override
53          public void onCreate(Bundle savedInstanceState) {          public void onCreate(Bundle savedInstanceState) {
54                  requestWindowFeature( Window.FEATURE_NO_TITLE );                  
55                  super.onCreate(savedInstanceState);                  super.onCreate(savedInstanceState);
56                    
57                    prefs = getSharedPreferences("TrainStation", 0);
58                    
59                    requestWindowFeature( Window.FEATURE_NO_TITLE );
60                  setContentView(R.layout.welcome);                  setContentView(R.layout.welcome);
61                                    
62                  Button nearestButton = (Button) findViewById(R.id.nearest);                  Button nearestButton = (Button) findViewById(R.id.nearest);
# Line 33  public class WelcomeScreen extends Activ Line 70  public class WelcomeScreen extends Activ
70                                    
71                  Button aboutButton = (Button) findViewById(R.id.about);                  Button aboutButton = (Button) findViewById(R.id.about);
72                  aboutButton.setOnClickListener( new AboutListener() );                  aboutButton.setOnClickListener( new AboutListener() );
73            
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                    
81                    CheckUpdates update = new CheckUpdates();
82                    update.checkForUpdates(this, "http://t-hoerup.dk/android/traininfo/version.txt", "TrainInfo DK", null);
83                    /*
84                    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                    */
93                    
94                    StationProvider sp = ProviderFactory.getStationProvider();
95                    
96                    if (sp instanceof OfflineStationProvider ) {
97                            OfflineStationProvider osp = (OfflineStationProvider) sp;
98                            long last = prefs.getLong(stationsreload, 0);
99                            long now = System.currentTimeMillis();
100                            Log.i("TrainInfo", "Last Load: " + last);
101    
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                                    stationLoader.execute( (Void)null);
118                            } else {
119                                    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                                            stationLoader.execute( (Void)null);
123                                    }
124                            }
125    
126                    }
127            }
128    
129    
130                    
131            @Override
132            protected void onDestroy() {
133                    super.onDestroy();
134                    if (stationLoader != null) {
135                            stationLoader.cancel(true);
136                    }
137                    
138                    ProviderFactory.purgeOldEntries(); //exiting application, do some cleanup
139            }
140    
141    
142            @Override
143            public boolean onCreateOptionsMenu(Menu menu) {
144                    MenuItem item;
145                    
146                    item = menu.add(0, MENU_SETTINGS, 0, getString(R.string.welcome_settings) );
147                    item.setIcon(android.R.drawable.ic_menu_preferences);
148                    
149                    item = menu.add(0, MENU_RELOAD, 0, getString(R.string.welcome_reloadstations));
150                    item.setIcon(android.R.drawable.ic_menu_rotate);
151                    
152                    return true;
153            }
154            
155            @Override
156            public boolean onOptionsItemSelected(MenuItem item) {
157                    boolean retval = true;
158                    
159                    switch (item.getItemId()) {
160                    case MENU_SETTINGS:
161                            Intent intent = new Intent(WelcomeScreen.this, SettingsScreen.class);
162                            WelcomeScreen.this.startActivity(intent);
163                            break;
164                            
165                    case MENU_RELOAD:
166                            OfflineStationProvider osp = (OfflineStationProvider) ProviderFactory.getStationProvider();
167                            new StationLoader(osp, false).execute( (Void)null);                    
168                            break;
169                            
170                    default:
171                            retval = super.onOptionsItemSelected(item);
172                    }
173                    
174                    return retval;
175          }          }
176                    
177    
178          class AboutListener implements OnClickListener {          class AboutListener implements OnClickListener {
179    
180                  @Override                  @Override
181                  public void onClick(View v) {                  public void onClick(View v) {
182                                                    /*
183                          String appName = WelcomeScreen.this.getResources().getString(R.string.app_name);                          String appName = WelcomeScreen.this.getResources().getString(R.string.app_name);
184                          String ver = WelcomeScreen.this.getResources().getString(R.string.app_version);                                          String ver = WelcomeScreen.this.getResources().getString(R.string.app_version);                
185                                                    
# Line 48  public class WelcomeScreen extends Activ Line 188  public class WelcomeScreen extends Activ
188                          message.append(" v").append(ver).append("\n");                          message.append(" v").append(ver).append("\n");
189                          message.append("By Torben H. Nielsen\n");                          message.append("By Torben H. Nielsen\n");
190    
191                          MessageBox.showMessage(WelcomeScreen.this, message.toString());                          MessageBox.showMessage(WelcomeScreen.this, message.toString());*/
192                            /*Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://t-hoerup.dk/android/traininfo/"));
193                            startActivity(browserIntent);*/
194                            
195                            Intent intent = new Intent(WelcomeScreen.this, AboutScreen.class);
196                            WelcomeScreen.this.startActivity(intent);
197                  }                  }
198    
199          }          }
200            
201    
202          class StationListListener implements OnClickListener{          class StationListListener implements OnClickListener{
203                  ListType launchType;                  ListType launchType;
# Line 61  public class WelcomeScreen extends Activ Line 207  public class WelcomeScreen extends Activ
207                                    
208                  @Override                  @Override
209                  public void onClick(View v) {                  public void onClick(View v) {
210                            
211                            StationProvider sp = ProviderFactory.getStationProvider();
212                            
213                            if (sp instanceof OfflineStationProvider ) {
214                                    OfflineStationProvider osp = (OfflineStationProvider) sp;
215                                    
216                                    if (! osp.hasStations()) {
217                                            stationLoader = new StationLoader(osp, false);
218                                            stationLoader.execute( (Void)null);    
219                                            return;
220                                    }
221                            }
222                            
223                          Intent intent = new Intent(WelcomeScreen.this, StationList.class);                          Intent intent = new Intent(WelcomeScreen.this, StationList.class);
224                          intent.putExtra("type", launchType);                          intent.putExtra("type", launchType);
225                          WelcomeScreen.this.startActivity(intent);                          WelcomeScreen.this.startActivity(intent);
226                  }                  }
227                                    
228          }          }
229            
230            class StationLoader extends AsyncTask<Void,Void,Void> {
231    
232    
233                    boolean succeeded;
234                    ProgressDialog dlg;
235                    OfflineStationProvider osp;
236                    String exMsg;
237                    boolean silent;
238                    
239                    public StationLoader(OfflineStationProvider osp, boolean silent) {
240                            this.osp = osp;
241                            this.silent = silent;
242                    }
243                    
244                    @Override
245                    protected Void doInBackground(Void... params) {
246                            try {
247                                    osp.downloadStations( WelcomeScreen.this );
248                                    succeeded = true;
249                            } catch (Exception e) {
250                                    succeeded = false;
251                                    exMsg = e.getMessage();
252                                    Log.e("TrainInfo", "download error", e);                                
253                            }
254                            return null;
255                    }
256    
257                    
258                    @Override
259                    protected void onPreExecute() {
260                            super.onPreExecute();
261                            Log.i("TrainInfo", "StationLoader.onPreExecute() ");
262                            
263                            if (silent == false) {
264                                    dlg = new ProgressDialog(WelcomeScreen.this);
265                                    dlg.setMessage( getText(R.string.welcome_downloadingstations) );
266                                    dlg.setCancelable(false);
267                                    dlg.show();
268                            }
269                    }
270    
271                    @Override
272                    protected void onPostExecute(Void result) {
273                            super.onPostExecute(result);
274                            Log.i("TrainInfo", "StationLoader.onPostExecute() ");
275                            
276                            if (silent == false) {
277                                    try {
278                                            dlg.dismiss();
279                                    } catch (Exception e) {
280                                            Log.e("TrainInfo", "Exception while closing dialog", e); // don't crash program
281                                    }
282                                    dlg = null;
283                            }
284                            
285                            if (succeeded) {
286                                    Editor edit = prefs.edit();
287                                    edit.putLong(stationsreload, System.currentTimeMillis() );
288                                    edit.commit();
289                            } else {
290                                    if (silent == false) {
291                                            Toast.makeText(WelcomeScreen.this, "Error " + exMsg, Toast.LENGTH_LONG).show();
292                                    }
293                            }
294                    }      
295            }
296            
297  }  }

Legend:
Removed from v.484  
changed lines
  Added in v.1718

  ViewVC Help
Powered by ViewVC 1.1.20