X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FWhereAmI.java;h=f3de41799e734b28e410bb6fa99bf8f39b91cd8b;hp=9d012c35997d4f4b11d625b678b0879ca3ce1e1a;hb=69b322114a2b66c1c3751d7414f2be525d301f65;hpb=558910007298559dde1b3d3cae13cd6c6dd79f75 diff --git a/src/org/average/whereami/WhereAmI.java b/src/org/average/whereami/WhereAmI.java index 9d012c3..f3de417 100644 --- a/src/org/average/whereami/WhereAmI.java +++ b/src/org/average/whereami/WhereAmI.java @@ -16,6 +16,9 @@ import android.content.res.Resources; 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; @@ -26,11 +29,54 @@ public class WhereAmI extends Activity 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 { + @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; @@ -80,6 +126,7 @@ public class WhereAmI extends Activity 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); @@ -90,18 +137,25 @@ public class WhereAmI extends Activity 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) { @@ -114,40 +168,12 @@ public class WhereAmI extends Activity 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 { - 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) @@ -182,8 +208,7 @@ public class WhereAmI extends Activity public void onPause() { super.onPause(); - Log.w("WhereAmI", "calling finish"); - this.finish(); + Log.w("WhereAmI", "going background"); } /** Called when the activity is destroyed. */ @@ -195,8 +220,34 @@ public class WhereAmI extends Activity 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); + } + } }