package org.average.whereami;
import android.app.Activity;
+import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.SystemClock;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Context;
import android.content.res.Resources;
import android.text.format.Time;
import android.util.Log;
public class WhereAmI extends Activity
{
+ private WifiManager wifiman;
+ private Integer runningtasks = 0;
+
private class UpdateTarget {
public TextView tv;
public Integer updater; // will be the function/object
private String[] month;
private String[] wday;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
- setContentView(R.layout.main);
- res = getResources();
- month = res.getStringArray(R.array.month);
- wday = res.getStringArray(R.array.wday);
- tvt = (TextView)findViewById(R.id.time);
- tvd = (TextView)findViewById(R.id.date);
- tvs = (TextView)findViewById(R.id.timestamp);
- ut = new UpdateTarget[] {
- new UpdateTarget((TextView)findViewById(R.id.location), 1),
- new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
- };
- Log.v("WhereAmI", "created UI, about to start update task");
- updateClock.run();
- updateCal.run();
- updateInfo.run();
- Log.v("WhereAmI", "created UI, update task created");
- }
-
private Handler mHandler = new Handler();
private Runnable updateClock = new Runnable () {
private Runnable updateInfo = new Runnable () {
public void run() {
- Log.v("updateInfo", "starting");
- for (int i = 0; i < ut.length; i++) {
- ut[i].tv.setText(R.string.updating);
- new TimedUpdateTask().execute(ut[i]);
+ Log.w("WhereAmI", "updateInfo starting");
+ IntentFilter intentFilter =
+ new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
+ registerReceiver(connChanged,intentFilter);
+ boolean wifion = wifiman.setWifiEnabled(true);
+ Log.w("WhereAmI", "enabling wifi result " + wifion);
+ mHandler.postDelayed(resetInfo, 30000);
+ mHandler.postDelayed(this, 60000);
+ }
+ };
+
+ private Runnable resetInfo = new Runnable () {
+ public void run() {
+ Log.w("WhereAmI", "resetInfo starting");
+ unregisterReceiver(connChanged);
+ boolean wifion = wifiman.setWifiEnabled(false);
+ Log.w("WhereAmI", "disabling wifi result " + wifion);
+ if (runningtasks > 0) {
+ Time tm = new Time();
+ tm.setToNow();
+ tvs.setText(R.string.failtry);
+ tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
}
- mHandler.postDelayed(this, 10000);
}
};
- private class TimedUpdateTask extends AsyncTask<UpdateTarget, Void, String> {
+ private final BroadcastReceiver connChanged = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ ConnectivityManager cm = (ConnectivityManager)context.
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+ boolean isConnected = activeNetwork != null &&
+ activeNetwork.isConnectedOrConnecting();
+ Log.w("WhereAmI", "Connectivity changed to " + isConnected);
+ if (isConnected) {
+ for (int i = 0; i < ut.length; i++) {
+ runningtasks++;
+ ut[i].tv.setText(R.string.updating);
+ new BgUpdate().execute(ut[i]);
+ }
+ }
+ }
+ };
+
+ private class BgUpdate extends AsyncTask<UpdateTarget, Void, String> {
private UpdateTarget ut;
@Override
protected String doInBackground(UpdateTarget... whereto) {
- Log.v("TimedUpdateTask", "starting");
+ Log.w("WhereAmI", "BgUpdate starting");
ut = whereto[0];
SystemClock.sleep(5000); // real job do be done here
- Log.v("TimedUpdateTask", "about to return");
+ Log.w("WhereAmI", "BgUpdate about to return");
return "5 seconds passed";
}
@Override
protected void onPostExecute(String str) {
- Log.v("TimedUpdateTask", "callback executing");
+ Log.w("WhereAmI", "BgUpdate callback executing");
ut.tv.setText(str);
- Time tm = new Time();
- tm.setToNow();
- tvs.setText(R.string.lasttry);
- tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
+ runningtasks--;
+ if (runningtasks <= 0) {
+ boolean wifion = wifiman.setWifiEnabled(false);
+ Log.w("WhereAmI", "disabling wifi result " + wifion);
+ Time tm = new Time();
+ tm.setToNow();
+ tvs.setText(R.string.lasttry);
+ tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
+ }
}
}
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ //getWindow().clearFlags(WindowManager.LayoutParams.
+ // FLAG_FORCE_NOT_FULLSCREEN);
+ setContentView(R.layout.main);
+ res = getResources();
+ month = res.getStringArray(R.array.month);
+ wday = res.getStringArray(R.array.wday);
+ tvt = (TextView)findViewById(R.id.time);
+ tvd = (TextView)findViewById(R.id.date);
+ tvs = (TextView)findViewById(R.id.timestamp);
+ ut = new UpdateTarget[] {
+ new UpdateTarget((TextView)findViewById(R.id.location), 1),
+ new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
+ };
+ Log.w("WhereAmI", "created UI, about to start update task");
+ mHandler.post(updateClock);
+ mHandler.post(updateCal);
+ mHandler.post(updateInfo);
+ Log.w("WhereAmI", "created UI, update task created");
+ }
+
+ /** Called when put to background */
+ @Override
+ public void onPause()
+ {
+ super.onPause();
+ Log.w("WhereAmI", "calling finish");
+ this.finish();
+ }
+
+ /** Called when the activity is destroyed. */
+ @Override
+ public void onDestroy()
+ {
+ super.onDestroy();
+ Log.w("WhereAmI", "going down");
+ mHandler.removeCallbacks(updateClock);
+ mHandler.removeCallbacks(updateCal);
+ mHandler.removeCallbacks(updateInfo);
+ //unregisterReceiver(connChanged);
+ boolean wifion = wifiman.setWifiEnabled(false);
+ Log.w("WhereAmI", "disabling wifi result " + wifion);
+ }
}