1 package org.average.whereami;
3 import org.average.whereami.WhereAmIprefs;
5 import android.app.Activity;
6 import android.net.wifi.WifiManager;
7 import android.os.Bundle;
8 import android.os.AsyncTask;
9 import android.os.Handler;
10 import android.os.SystemClock;
11 import android.net.ConnectivityManager;
12 import android.net.NetworkInfo;
13 import android.content.BroadcastReceiver;
14 import android.content.Intent;
15 import android.content.IntentFilter;
16 import android.content.Context;
17 import android.content.res.Resources;
18 import android.content.SharedPreferences;
19 import android.preference.PreferenceManager;
20 import android.text.format.Time;
21 import android.util.Log;
22 import android.view.View;
23 import android.view.Menu;
24 import android.view.MenuInflater;
25 import android.view.MenuItem;
26 import android.view.Window;
27 import android.view.WindowManager;
28 import android.widget.TextView;
30 public class WhereAmI extends Activity
32 private WifiManager wifiman;
33 private Long updatedelay = 60000L;
34 private Integer runningtasks = 0;
35 private SharedPreferences prefs;
37 private class UpdateTarget {
39 private Integer updater; // will be the function/object
40 private BgUpdate task;
42 private class BgUpdate extends AsyncTask<Void, Void, String> {
44 protected String doInBackground(Void... params) {
45 Log.w("WhereAmI", "BgUpdate " + updater + " starting");
46 SystemClock.sleep(5000); // real job do be done here
47 Log.w("WhereAmI", "BgUpdate about to return");
48 return "5 seconds passed in " + updater;
52 protected void onPostExecute(String str) {
53 Log.w("WhereAmI", "BgUpdate callback executing");
56 if (runningtasks <= 0) {
57 boolean wifion = wifiman.setWifiEnabled(false);
58 Log.w("WhereAmI", "disabling wifi result " + wifion);
61 tvs.setText(R.string.lasttry);
62 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
67 protected void onCancelled() {
68 Log.w("WhereAmI", "BgUpdate callback cancelled");
73 public UpdateTarget(TextView tv, Integer updater) {
75 this.updater = updater;
78 public void launch() {
79 tv.setText(R.string.updating);
80 task = new BgUpdate();
84 public void cancel() {
88 private UpdateTarget[] ut;
90 private TextView tvt, tvd, tvs;
91 private Resources res;
92 private String[] month;
93 private String[] wday;
95 private Handler mHandler = new Handler();
97 private Runnable updateClock = new Runnable () {
99 long now = System.currentTimeMillis();
100 Time tm = new Time();
102 tvt.setText(tm.format("%H:%M"));
105 long next = tm.toMillis(false);
106 mHandler.postDelayed(this, next-now+1);
110 private Runnable updateCal = new Runnable () {
112 long now = System.currentTimeMillis();
113 Time tm = new Time();
120 tm.set(now + 86400000);
124 long next = tm.toMillis(false);
125 mHandler.postDelayed(this, next-now+1);
129 private Runnable updateInfo = new Runnable () {
131 Log.w("WhereAmI", "updateInfo starting");
132 IntentFilter intentFilter =
133 new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
134 registerReceiver(connChanged,intentFilter);
135 connChangedRegistered = true;
136 boolean wifion = wifiman.setWifiEnabled(true);
137 Log.w("WhereAmI", "enabling wifi result " + wifion);
138 mHandler.postDelayed(resetInfo, updatedelay);
139 mHandler.postDelayed(this, 60000);
143 private Runnable resetInfo = new Runnable () {
145 Log.w("WhereAmI", "resetInfo starting");
146 if (connChangedRegistered) {
147 unregisterReceiver(connChanged);
148 connChangedRegistered = false;
150 if (runningtasks > 0) {
151 for (int i = 0; i < ut.length; i++) {
154 Time tm = new Time();
156 tvs.setText(R.string.failtry);
157 tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
159 boolean wifion = wifiman.setWifiEnabled(false);
160 Log.w("WhereAmI", "disabling wifi result " + wifion);
164 private boolean connChangedRegistered = false;
165 private final BroadcastReceiver connChanged = new BroadcastReceiver() {
167 public void onReceive(Context context, Intent intent) {
168 ConnectivityManager cm = (ConnectivityManager)context.
169 getSystemService(Context.CONNECTIVITY_SERVICE);
170 NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
171 boolean isConnected = activeNetwork != null &&
172 activeNetwork.isConnectedOrConnecting();
173 Log.w("WhereAmI", "Connectivity changed to " + isConnected);
175 for (int i = 0; i < ut.length; i++) {
183 /** Called when the activity is first created. */
185 public void onCreate(Bundle savedInstanceState) {
186 super.onCreate(savedInstanceState);
187 wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE);
188 requestWindowFeature(Window.FEATURE_NO_TITLE);
189 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
190 setContentView(R.layout.main);
191 res = getResources();
192 month = res.getStringArray(R.array.month);
193 wday = res.getStringArray(R.array.wday);
194 tvt = (TextView)findViewById(R.id.time);
195 tvd = (TextView)findViewById(R.id.date);
196 tvs = (TextView)findViewById(R.id.timestamp);
197 ut = new UpdateTarget[] {
198 new UpdateTarget((TextView)findViewById(R.id.location), 1),
199 new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
201 Log.w("WhereAmI", "created UI, about to start update task");
202 mHandler.post(updateClock);
203 mHandler.post(updateCal);
204 mHandler.post(updateInfo);
205 Log.w("WhereAmI", "created UI, update task created");
208 /** Called when reactivated */
210 public void onResume() {
212 prefs = PreferenceManager.getDefaultSharedPreferences(this);
213 boolean fullscreen = prefs.getBoolean("fullscreen", false);
214 updatedelay = Long.parseLong(prefs.getString("updateperiod", "1200000"));
216 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
217 getWindow().clearFlags(WindowManager.LayoutParams.
218 FLAG_FORCE_NOT_FULLSCREEN);
220 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
224 /** Called when put to background */
226 public void onPause() {
228 Log.w("WhereAmI", "going background");
231 /** Called when the activity is destroyed. */
233 public void onDestroy() {
235 Log.w("WhereAmI", "going down");
236 mHandler.removeCallbacks(updateClock);
237 mHandler.removeCallbacks(updateCal);
238 mHandler.removeCallbacks(updateInfo);
239 if (connChangedRegistered) {
240 unregisterReceiver(connChanged);
241 connChangedRegistered = false;
243 boolean wifion = wifiman.setWifiEnabled(false);
244 Log.w("WhereAmI", "disabling wifi result " + wifion);
247 /** Called when the menu is activated. */
249 public boolean onCreateOptionsMenu(Menu menu) {
250 MenuInflater inflater = getMenuInflater();
251 inflater.inflate(R.menu.main_menu, menu);
255 /** Called when the menu item is selected */
257 public boolean onOptionsItemSelected(MenuItem item) {
258 switch (item.getItemId()) {
263 Log.w("WhereAmI", "settings requested");
264 startActivity(new Intent(this, WhereAmIprefs.class));
267 return super.onOptionsItemSelected(item);