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.net.ConnectivityManager;
14 import android.net.NetworkInfo;
15 import android.content.BroadcastReceiver;
16 import android.content.Intent;
17 import android.content.IntentFilter;
18 import android.content.Context;
19 import android.content.res.Resources;
20 import android.content.SharedPreferences;
21 import android.preference.PreferenceManager;
22 import android.text.format.Time;
23 import android.util.Log;
24 import android.view.View;
25 import android.view.Menu;
26 import android.view.MenuInflater;
27 import android.view.MenuItem;
28 import android.view.Window;
29 import android.view.WindowManager;
30 import android.widget.TextView;
32 public class WhereAmI extends Activity
34 private WifiManager wifiman;
35 private Boolean managewifi = false;
36 private Long updatedelay = 60000L;
37 private Integer runningtasks = 0;
38 private SharedPreferences prefs;
40 private class UpdateTarget {
42 private Oracle updater;
43 private BgUpdate task;
45 private class BgUpdate extends AsyncTask<Void, Void, String> {
47 protected String doInBackground(Void... params) {
48 Log.w("WhereAmI", "BgUpdate " + updater + " starting");
49 return updater.getResult();
53 protected void onPostExecute(String str) {
54 Log.w("WhereAmI", "BgUpdate callback executing");
57 if (runningtasks <= 0) {
58 boolean wifion = wifiman.setWifiEnabled(false);
59 Log.w("WhereAmI", "disabling wifi result " + wifion);
62 tvs.setText(R.string.lasttry);
63 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
68 protected void onCancelled() {
69 Log.w("WhereAmI", "BgUpdate callback cancelled");
74 public UpdateTarget(TextView tv, Oracle updater) {
76 this.updater = updater;
79 public void launch() {
80 tv.setText(R.string.updating);
81 task = new BgUpdate();
85 public void cancel() {
89 private UpdateTarget[] ut;
91 private TextView tvt, tvd, tvs;
92 private Resources res;
93 private String[] month;
94 private String[] wday;
96 private Handler mHandler = new Handler();
98 private Runnable updateClock = new Runnable () {
100 long now = System.currentTimeMillis();
101 Time tm = new Time();
103 tvt.setText(tm.format("%H:%M"));
106 long next = tm.toMillis(false);
107 mHandler.postDelayed(this, next-now+1);
111 private Runnable updateCal = new Runnable () {
113 long now = System.currentTimeMillis();
114 Time tm = new Time();
121 tm.set(now + 86400000);
125 long next = tm.toMillis(false);
126 mHandler.postDelayed(this, next-now+1);
130 private Runnable updateInfo = new Runnable () {
132 Log.w("WhereAmI", "updateInfo starting");
134 IntentFilter intentFilter =
135 new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
136 registerReceiver(connChanged,intentFilter);
137 connChangedRegistered = true;
138 boolean wifion = wifiman.setWifiEnabled(true);
139 Log.w("WhereAmI", "enabling wifi result " + wifion);
141 for (int i = 0; i < ut.length; i++) {
146 mHandler.postDelayed(resetInfo, updatedelay);
147 mHandler.postDelayed(this, 60000);
151 private Runnable resetInfo = new Runnable () {
153 Log.w("WhereAmI", "resetInfo starting");
154 if (connChangedRegistered) {
155 unregisterReceiver(connChanged);
156 connChangedRegistered = false;
158 if (runningtasks > 0) {
159 for (int i = 0; i < ut.length; i++) {
162 Time tm = new Time();
164 tvs.setText(R.string.failtry);
165 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
168 boolean wifion = wifiman.setWifiEnabled(false);
169 Log.w("WhereAmI", "disabling wifi result " + wifion);
174 private boolean connChangedRegistered = false;
175 private final BroadcastReceiver connChanged = new BroadcastReceiver() {
177 public void onReceive(Context context, Intent intent) {
178 ConnectivityManager cm = (ConnectivityManager)context.
179 getSystemService(Context.CONNECTIVITY_SERVICE);
180 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
181 boolean isConnected = activeNetwork != null &&
182 activeNetwork.isConnectedOrConnecting();
183 Log.w("WhereAmI", "Connectivity changed to " + isConnected);
185 for (int i = 0; i < ut.length; i++) {
193 /** Called when the activity is first created. */
195 public void onCreate(Bundle savedInstanceState) {
196 super.onCreate(savedInstanceState);
197 wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
198 requestWindowFeature(Window.FEATURE_NO_TITLE);
199 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
200 setContentView(R.layout.main);
201 res = getResources();
202 month = res.getStringArray(R.array.month);
203 wday = res.getStringArray(R.array.wday);
204 tvt = (TextView)findViewById(R.id.time);
205 tvd = (TextView)findViewById(R.id.date);
206 tvs = (TextView)findViewById(R.id.timestamp);
207 ut = new UpdateTarget[] {
208 new UpdateTarget((TextView)findViewById(R.id.location),
210 new UpdateTarget((TextView)findViewById(R.id.phonecall),
213 Log.w("WhereAmI", "created UI, about to start update task");
214 mHandler.post(updateClock);
215 mHandler.post(updateCal);
216 mHandler.post(updateInfo);
217 Log.w("WhereAmI", "created UI, update task created");
220 /** Called when reactivated */
222 public void onResume() {
224 prefs = PreferenceManager.getDefaultSharedPreferences(this);
225 boolean fullscreen = prefs.getBoolean("fullscreen", false);
226 managewifi = prefs.getBoolean("managewifi", false);
227 updatedelay = Long.parseLong(prefs.getString("updateperiod", "1200000"));
229 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
230 getWindow().clearFlags(WindowManager.LayoutParams.
231 FLAG_FORCE_NOT_FULLSCREEN);
233 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
237 /** Called when put to background */
239 public void onPause() {
241 Log.w("WhereAmI", "going background");
244 /** Called when the activity is destroyed. */
246 public void onDestroy() {
248 Log.w("WhereAmI", "going down");
249 mHandler.removeCallbacks(updateClock);
250 mHandler.removeCallbacks(updateCal);
251 mHandler.removeCallbacks(updateInfo);
252 if (connChangedRegistered) {
253 unregisterReceiver(connChanged);
254 connChangedRegistered = false;
256 boolean wifion = wifiman.setWifiEnabled(false);
257 Log.w("WhereAmI", "disabling wifi result " + wifion);
260 /** Called when the menu is activated. */
262 public boolean onCreateOptionsMenu(Menu menu) {
263 MenuInflater inflater = getMenuInflater();
264 inflater.inflate(R.menu.main_menu, menu);
268 /** Called when the menu item is selected */
270 public boolean onOptionsItemSelected(MenuItem item) {
271 switch (item.getItemId()) {
276 Log.w("WhereAmI", "settings requested");
277 startActivity(new Intent(this, WhereAmIprefs.class));
280 return super.onOptionsItemSelected(item);