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 private Integer updater; // will be the function/object
31 private BgUpdate task;
33 private class BgUpdate extends AsyncTask<Void, Void, String> {
35 protected String doInBackground(Void... params) {
36 Log.w("WhereAmI", "BgUpdate " + updater + " starting");
37 SystemClock.sleep(5000); // real job do be done here
38 Log.w("WhereAmI", "BgUpdate about to return");
39 return "5 seconds passed in " + updater;
43 protected void onPostExecute(String str) {
44 Log.w("WhereAmI", "BgUpdate callback executing");
47 if (runningtasks <= 0) {
48 boolean wifion = wifiman.setWifiEnabled(false);
49 Log.w("WhereAmI", "disabling wifi result " + wifion);
52 tvs.setText(R.string.lasttry);
53 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
58 protected void onCancelled() {
59 Log.w("WhereAmI", "BgUpdate callback cancelled");
64 public UpdateTarget(TextView tv, Integer updater) {
66 this.updater = updater;
69 public void launch() {
70 tv.setText(R.string.updating);
71 task = new BgUpdate();
75 public void cancel() {
79 private UpdateTarget[] ut;
81 private TextView tvt, tvd, tvs;
82 private Resources res;
83 private String[] month;
84 private String[] wday;
86 private Handler mHandler = new Handler();
88 private Runnable updateClock = new Runnable () {
90 long now = System.currentTimeMillis();
93 tvt.setText(tm.format("%H:%M"));
96 long next = tm.toMillis(false);
97 mHandler.postDelayed(this, next-now+1);
101 private Runnable updateCal = new Runnable () {
103 long now = System.currentTimeMillis();
104 Time tm = new Time();
111 tm.set(now + 86400000);
115 long next = tm.toMillis(false);
116 mHandler.postDelayed(this, next-now+1);
120 private Runnable updateInfo = new Runnable () {
122 Log.w("WhereAmI", "updateInfo starting");
123 IntentFilter intentFilter =
124 new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
125 registerReceiver(connChanged,intentFilter);
126 boolean wifion = wifiman.setWifiEnabled(true);
127 Log.w("WhereAmI", "enabling wifi result " + wifion);
128 mHandler.postDelayed(resetInfo, 30000);
129 mHandler.postDelayed(this, 60000);
133 private Runnable resetInfo = new Runnable () {
135 Log.w("WhereAmI", "resetInfo starting");
136 unregisterReceiver(connChanged);
137 if (runningtasks > 0) {
138 for (int i = 0; i < ut.length; i++) {
141 Time tm = new Time();
143 tvs.setText(R.string.failtry);
144 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
146 boolean wifion = wifiman.setWifiEnabled(false);
147 Log.w("WhereAmI", "disabling wifi result " + wifion);
151 private final BroadcastReceiver connChanged = new BroadcastReceiver() {
153 public void onReceive(Context context, Intent intent) {
154 ConnectivityManager cm = (ConnectivityManager)context.
155 getSystemService(Context.CONNECTIVITY_SERVICE);
156 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
157 boolean isConnected = activeNetwork != null &&
158 activeNetwork.isConnectedOrConnecting();
159 Log.w("WhereAmI", "Connectivity changed to " + isConnected);
161 for (int i = 0; i < ut.length; i++) {
169 /** Called when the activity is first created. */
171 public void onCreate(Bundle savedInstanceState)
173 super.onCreate(savedInstanceState);
174 wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
175 requestWindowFeature(Window.FEATURE_NO_TITLE);
176 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
177 //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
178 //getWindow().clearFlags(WindowManager.LayoutParams.
179 // FLAG_FORCE_NOT_FULLSCREEN);
180 setContentView(R.layout.main);
181 res = getResources();
182 month = res.getStringArray(R.array.month);
183 wday = res.getStringArray(R.array.wday);
184 tvt = (TextView)findViewById(R.id.time);
185 tvd = (TextView)findViewById(R.id.date);
186 tvs = (TextView)findViewById(R.id.timestamp);
187 ut = new UpdateTarget[] {
188 new UpdateTarget((TextView)findViewById(R.id.location), 1),
189 new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
191 Log.w("WhereAmI", "created UI, about to start update task");
192 mHandler.post(updateClock);
193 mHandler.post(updateCal);
194 mHandler.post(updateInfo);
195 Log.w("WhereAmI", "created UI, update task created");
198 /** Called when put to background */
200 public void onPause()
203 Log.w("WhereAmI", "calling finish");
207 /** Called when the activity is destroyed. */
209 public void onDestroy()
212 Log.w("WhereAmI", "going down");
213 mHandler.removeCallbacks(updateClock);
214 mHandler.removeCallbacks(updateCal);
215 mHandler.removeCallbacks(updateInfo);
216 //unregisterReceiver(connChanged);
217 boolean wifion = wifiman.setWifiEnabled(false);
218 Log.w("WhereAmI", "disabling wifi result " + wifion);