1 package org.average.whereami;
3 import android.app.Activity;
4 import android.net.wifi.WifiManager;
5 import android.os.Bundle;
6 import android.os.AsyncTask;
7 import android.os.Handler;
8 import android.os.SystemClock;
9 import android.net.ConnectivityManager;
10 import android.net.NetworkInfo;
11 import android.content.BroadcastReceiver;
12 import android.content.Intent;
13 import android.content.IntentFilter;
14 import android.content.Context;
15 import android.content.res.Resources;
16 import android.text.format.Time;
17 import android.util.Log;
18 import android.view.View;
19 import android.view.Window;
20 import android.view.WindowManager;
21 import android.widget.TextView;
23 public class WhereAmI extends Activity
25 private WifiManager wifiman;
26 private Integer runningtasks = 0;
28 private class UpdateTarget {
30 public Integer updater; // will be the function/object
31 public UpdateTarget(TextView tv, Integer updater) {
33 this.updater = updater;
36 private UpdateTarget[] ut;
38 private TextView tvt, tvd, tvs;
39 private Resources res;
40 private String[] month;
41 private String[] wday;
43 private Handler mHandler = new Handler();
45 private Runnable updateClock = new Runnable () {
47 long now = System.currentTimeMillis();
50 tvt.setText(tm.format("%H:%M"));
53 long next = tm.toMillis(false);
54 mHandler.postDelayed(this, next-now+1);
58 private Runnable updateCal = new Runnable () {
60 long now = System.currentTimeMillis();
68 tm.set(now + 86400000);
72 long next = tm.toMillis(false);
73 mHandler.postDelayed(this, next-now+1);
77 private Runnable updateInfo = new Runnable () {
79 Log.w("WhereAmI", "updateInfo starting");
80 IntentFilter intentFilter =
81 new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
82 registerReceiver(connChanged,intentFilter);
83 boolean wifion = wifiman.setWifiEnabled(true);
84 Log.w("WhereAmI", "enabling wifi result " + wifion);
85 mHandler.postDelayed(resetInfo, 30000);
86 mHandler.postDelayed(this, 60000);
90 private Runnable resetInfo = new Runnable () {
92 Log.w("WhereAmI", "resetInfo starting");
93 unregisterReceiver(connChanged);
94 boolean wifion = wifiman.setWifiEnabled(false);
95 Log.w("WhereAmI", "disabling wifi result " + wifion);
96 if (runningtasks > 0) {
99 tvs.setText(R.string.failtry);
100 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
105 private final BroadcastReceiver connChanged = new BroadcastReceiver() {
107 public void onReceive(Context context, Intent intent) {
108 ConnectivityManager cm = (ConnectivityManager)context.
109 getSystemService(Context.CONNECTIVITY_SERVICE);
110 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
111 boolean isConnected = activeNetwork != null &&
112 activeNetwork.isConnectedOrConnecting();
113 Log.w("WhereAmI", "Connectivity changed to " + isConnected);
115 for (int i = 0; i < ut.length; i++) {
117 ut[i].tv.setText(R.string.updating);
118 new BgUpdate().execute(ut[i]);
124 private class BgUpdate extends AsyncTask<UpdateTarget, Void, String> {
125 private UpdateTarget ut;
127 protected String doInBackground(UpdateTarget... whereto) {
128 Log.w("WhereAmI", "BgUpdate starting");
130 SystemClock.sleep(5000); // real job do be done here
131 Log.w("WhereAmI", "BgUpdate about to return");
132 return "5 seconds passed";
136 protected void onPostExecute(String str) {
137 Log.w("WhereAmI", "BgUpdate callback executing");
140 if (runningtasks <= 0) {
141 boolean wifion = wifiman.setWifiEnabled(false);
142 Log.w("WhereAmI", "disabling wifi result " + wifion);
143 Time tm = new Time();
145 tvs.setText(R.string.lasttry);
146 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
151 /** Called when the activity is first created. */
153 public void onCreate(Bundle savedInstanceState)
155 super.onCreate(savedInstanceState);
156 wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
157 requestWindowFeature(Window.FEATURE_NO_TITLE);
158 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
159 //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
160 //getWindow().clearFlags(WindowManager.LayoutParams.
161 // FLAG_FORCE_NOT_FULLSCREEN);
162 setContentView(R.layout.main);
163 res = getResources();
164 month = res.getStringArray(R.array.month);
165 wday = res.getStringArray(R.array.wday);
166 tvt = (TextView)findViewById(R.id.time);
167 tvd = (TextView)findViewById(R.id.date);
168 tvs = (TextView)findViewById(R.id.timestamp);
169 ut = new UpdateTarget[] {
170 new UpdateTarget((TextView)findViewById(R.id.location), 1),
171 new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
173 Log.w("WhereAmI", "created UI, about to start update task");
174 mHandler.post(updateClock);
175 mHandler.post(updateCal);
176 mHandler.post(updateInfo);
177 Log.w("WhereAmI", "created UI, update task created");
180 /** Called when put to background */
182 public void onPause()
185 Log.w("WhereAmI", "calling finish");
189 /** Called when the activity is destroyed. */
191 public void onDestroy()
194 Log.w("WhereAmI", "going down");
195 mHandler.removeCallbacks(updateClock);
196 mHandler.removeCallbacks(updateCal);
197 mHandler.removeCallbacks(updateInfo);
198 //unregisterReceiver(connChanged);
199 boolean wifion = wifiman.setWifiEnabled(false);
200 Log.w("WhereAmI", "disabling wifi result " + wifion);