1 package org.average.whereami;
3 import org.average.whereami.WhereAmIprefs;
4 import org.average.whereami.Oracle;
5 import org.average.whereami.PhoneLog;
6 import org.average.whereami.Location;
8 import android.app.Activity;
9 import android.net.wifi.WifiManager;
10 import android.os.Bundle;
11 import android.os.AsyncTask;
12 import android.os.Handler;
13 import android.os.SystemClock;
14 import android.net.ConnectivityManager;
15 import android.net.NetworkInfo;
16 import android.content.BroadcastReceiver;
17 import android.content.Intent;
18 import android.content.IntentFilter;
19 import android.content.Context;
20 import android.content.res.Resources;
21 import android.content.SharedPreferences;
22 import android.preference.PreferenceManager;
23 import android.text.format.Time;
24 import android.util.Log;
25 import android.view.View;
26 import android.view.Menu;
27 import android.view.MenuInflater;
28 import android.view.MenuItem;
29 import android.view.Window;
30 import android.view.WindowManager;
31 import android.widget.TextView;
33 public class WhereAmI extends Activity
35 private WifiManager wifiman;
36 private Boolean managewifi = false;
37 private Long updatedelay = 60000L;
38 private Integer runningtasks = 0;
39 private SharedPreferences prefs;
41 private class UpdateTarget {
43 private Oracle updater;
44 private BgUpdate task;
46 private class BgUpdate extends AsyncTask<Void, Void, String> {
48 protected String doInBackground(Void... params) {
49 Log.w("WhereAmI", "BgUpdate " + updater + " starting");
50 SystemClock.sleep(5000); // real job do be done here
51 String result = updater.getResult();
52 Log.w("WhereAmI", "BgUpdate about to return");
57 protected void onPostExecute(String str) {
58 Log.w("WhereAmI", "BgUpdate callback executing");
61 if (runningtasks <= 0) {
62 boolean wifion = wifiman.setWifiEnabled(false);
63 Log.w("WhereAmI", "disabling wifi result " + wifion);
66 tvs.setText(R.string.lasttry);
67 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
72 protected void onCancelled() {
73 Log.w("WhereAmI", "BgUpdate callback cancelled");
78 public UpdateTarget(TextView tv, Oracle updater) {
80 this.updater = updater;
83 public void launch() {
84 tv.setText(R.string.updating);
85 task = new BgUpdate();
89 public void cancel() {
93 private UpdateTarget[] ut;
95 private TextView tvt, tvd, tvs;
96 private Resources res;
97 private String[] month;
98 private String[] wday;
100 private Handler mHandler = new Handler();
102 private Runnable updateClock = new Runnable () {
104 long now = System.currentTimeMillis();
105 Time tm = new Time();
107 tvt.setText(tm.format("%H:%M"));
110 long next = tm.toMillis(false);
111 mHandler.postDelayed(this, next-now+1);
115 private Runnable updateCal = new Runnable () {
117 long now = System.currentTimeMillis();
118 Time tm = new Time();
125 tm.set(now + 86400000);
129 long next = tm.toMillis(false);
130 mHandler.postDelayed(this, next-now+1);
134 private Runnable updateInfo = new Runnable () {
136 Log.w("WhereAmI", "updateInfo starting");
138 IntentFilter intentFilter =
139 new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
140 registerReceiver(connChanged,intentFilter);
141 connChangedRegistered = true;
142 boolean wifion = wifiman.setWifiEnabled(true);
143 Log.w("WhereAmI", "enabling wifi result " + wifion);
145 for (int i = 0; i < ut.length; i++) {
150 mHandler.postDelayed(resetInfo, updatedelay);
151 mHandler.postDelayed(this, 60000);
155 private Runnable resetInfo = new Runnable () {
157 Log.w("WhereAmI", "resetInfo starting");
158 if (connChangedRegistered) {
159 unregisterReceiver(connChanged);
160 connChangedRegistered = false;
162 if (runningtasks > 0) {
163 for (int i = 0; i < ut.length; i++) {
166 Time tm = new Time();
168 tvs.setText(R.string.failtry);
169 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
172 boolean wifion = wifiman.setWifiEnabled(false);
173 Log.w("WhereAmI", "disabling wifi result " + wifion);
178 private boolean connChangedRegistered = false;
179 private final BroadcastReceiver connChanged = new BroadcastReceiver() {
181 public void onReceive(Context context, Intent intent) {
182 ConnectivityManager cm = (ConnectivityManager)context.
183 getSystemService(Context.CONNECTIVITY_SERVICE);
184 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
185 boolean isConnected = activeNetwork != null &&
186 activeNetwork.isConnectedOrConnecting();
187 Log.w("WhereAmI", "Connectivity changed to " + isConnected);
189 for (int i = 0; i < ut.length; i++) {
197 /** Called when the activity is first created. */
199 public void onCreate(Bundle savedInstanceState) {
200 super.onCreate(savedInstanceState);
201 wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
202 requestWindowFeature(Window.FEATURE_NO_TITLE);
203 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
204 setContentView(R.layout.main);
205 res = getResources();
206 month = res.getStringArray(R.array.month);
207 wday = res.getStringArray(R.array.wday);
208 tvt = (TextView)findViewById(R.id.time);
209 tvd = (TextView)findViewById(R.id.date);
210 tvs = (TextView)findViewById(R.id.timestamp);
211 ut = new UpdateTarget[] {
212 new UpdateTarget((TextView)findViewById(R.id.location),
214 new UpdateTarget((TextView)findViewById(R.id.phonecall),
217 Log.w("WhereAmI", "created UI, about to start update task");
218 mHandler.post(updateClock);
219 mHandler.post(updateCal);
220 mHandler.post(updateInfo);
221 Log.w("WhereAmI", "created UI, update task created");
224 /** Called when reactivated */
226 public void onResume() {
228 prefs = PreferenceManager.getDefaultSharedPreferences(this);
229 boolean fullscreen = prefs.getBoolean("fullscreen", false);
230 managewifi = prefs.getBoolean("managewifi", false);
231 updatedelay = Long.parseLong(prefs.getString("updateperiod", "1200000"));
233 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
234 getWindow().clearFlags(WindowManager.LayoutParams.
235 FLAG_FORCE_NOT_FULLSCREEN);
237 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
241 /** Called when put to background */
243 public void onPause() {
245 Log.w("WhereAmI", "going background");
248 /** Called when the activity is destroyed. */
250 public void onDestroy() {
252 Log.w("WhereAmI", "going down");
253 mHandler.removeCallbacks(updateClock);
254 mHandler.removeCallbacks(updateCal);
255 mHandler.removeCallbacks(updateInfo);
256 if (connChangedRegistered) {
257 unregisterReceiver(connChanged);
258 connChangedRegistered = false;
260 boolean wifion = wifiman.setWifiEnabled(false);
261 Log.w("WhereAmI", "disabling wifi result " + wifion);
264 /** Called when the menu is activated. */
266 public boolean onCreateOptionsMenu(Menu menu) {
267 MenuInflater inflater = getMenuInflater();
268 inflater.inflate(R.menu.main_menu, menu);
272 /** Called when the menu item is selected */
274 public boolean onOptionsItemSelected(MenuItem item) {
275 switch (item.getItemId()) {
280 Log.w("WhereAmI", "settings requested");
281 startActivity(new Intent(this, WhereAmIprefs.class));
284 return super.onOptionsItemSelected(item);