import android.text.format.Time;
import android.util.Log;
import android.view.View;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
private Integer runningtasks = 0;
private class UpdateTarget {
- public TextView tv;
- public Integer updater; // will be the function/object
+ private TextView tv;
+ private Integer updater; // will be the function/object
+ private BgUpdate task;
+
+ private class BgUpdate extends AsyncTask<Void, Void, String> {
+ @Override
+ protected String doInBackground(Void... params) {
+ Log.w("WhereAmI", "BgUpdate " + updater + " starting");
+ SystemClock.sleep(5000); // real job do be done here
+ Log.w("WhereAmI", "BgUpdate about to return");
+ return "5 seconds passed in " + updater;
+ }
+
+ @Override
+ protected void onPostExecute(String str) {
+ Log.w("WhereAmI", "BgUpdate callback executing");
+ tv.setText(str);
+ runningtasks--;
+ if (runningtasks <= 0) {
+ boolean wifion = wifiman.setWifiEnabled(false);
+ Log.w("WhereAmI", "disabling wifi result " + wifion);
+ Time tm = new Time();
+ tm.setToNow();
+ tvs.setText(R.string.lasttry);
+ tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
+ }
+ }
+
+ @Override
+ protected void onCancelled() {
+ Log.w("WhereAmI", "BgUpdate callback cancelled");
+ runningtasks--;
+ }
+ }
+
public UpdateTarget(TextView tv, Integer updater) {
- this.tv = tv;
- this.updater = updater;
+ this.tv = tv;
+ this.updater = updater;
+ }
+
+ public void launch() {
+ tv.setText(R.string.updating);
+ task = new BgUpdate();
+ task.execute();
+ }
+
+ public void cancel() {
+ task.cancel(true);
}
}
private UpdateTarget[] ut;
IntentFilter intentFilter =
new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(connChanged,intentFilter);
+ connChangedRegistered = true;
boolean wifion = wifiman.setWifiEnabled(true);
Log.w("WhereAmI", "enabling wifi result " + wifion);
mHandler.postDelayed(resetInfo, 30000);
private Runnable resetInfo = new Runnable () {
public void run() {
Log.w("WhereAmI", "resetInfo starting");
- unregisterReceiver(connChanged);
- boolean wifion = wifiman.setWifiEnabled(false);
- Log.w("WhereAmI", "disabling wifi result " + wifion);
+ if (connChangedRegistered) {
+ unregisterReceiver(connChanged);
+ connChangedRegistered = false;
+ }
if (runningtasks > 0) {
+ for (int i = 0; i < ut.length; i++) {
+ ut[i].cancel();
+ }
Time tm = new Time();
tm.setToNow();
tvs.setText(R.string.failtry);
tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
}
+ boolean wifion = wifiman.setWifiEnabled(false);
+ Log.w("WhereAmI", "disabling wifi result " + wifion);
}
};
+ private boolean connChangedRegistered = false;
private final BroadcastReceiver connChanged = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (isConnected) {
for (int i = 0; i < ut.length; i++) {
runningtasks++;
- ut[i].tv.setText(R.string.updating);
- new BgUpdate().execute(ut[i]);
+ ut[i].launch();
}
}
}
};
- private class BgUpdate extends AsyncTask<UpdateTarget, Void, String> {
- private UpdateTarget ut;
- @Override
- protected String doInBackground(UpdateTarget... whereto) {
- Log.w("WhereAmI", "BgUpdate starting");
- ut = whereto[0];
- SystemClock.sleep(5000); // real job do be done here
- Log.w("WhereAmI", "BgUpdate about to return");
- return "5 seconds passed";
- }
-
- @Override
- protected void onPostExecute(String str) {
- Log.w("WhereAmI", "BgUpdate callback executing");
- ut.tv.setText(str);
- runningtasks--;
- if (runningtasks <= 0) {
- boolean wifion = wifiman.setWifiEnabled(false);
- Log.w("WhereAmI", "disabling wifi result " + wifion);
- Time tm = new Time();
- tm.setToNow();
- tvs.setText(R.string.lasttry);
- tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
- }
- }
- }
-
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
public void onPause()
{
super.onPause();
- Log.w("WhereAmI", "calling finish");
- this.finish();
+ Log.w("WhereAmI", "going background");
}
/** Called when the activity is destroyed. */
mHandler.removeCallbacks(updateClock);
mHandler.removeCallbacks(updateCal);
mHandler.removeCallbacks(updateInfo);
- //unregisterReceiver(connChanged);
+ if (connChangedRegistered) {
+ unregisterReceiver(connChanged);
+ connChangedRegistered = false;
+ }
boolean wifion = wifiman.setWifiEnabled(false);
Log.w("WhereAmI", "disabling wifi result " + wifion);
}
+
+ /** Called when the menu is activated. */
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.main_menu, menu);
+ return true;
+ }
+
+ /** Called when the menu item is selected */
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.quit:
+ finish();
+ return true;
+ case R.id.settings:
+ Log.w("WhereAmI", "settings requested");
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
}