From 558910007298559dde1b3d3cae13cd6c6dd79f75 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Mon, 30 Jan 2012 01:00:48 +0400 Subject: [PATCH] start updates when connectivity is established --- AndroidManifest.xml | 5 +- project.properties | 2 +- res/layout/main.xml | 4 +- res/values/strings.xml | 1 + src/org/average/whereami/WhereAmI.java | 155 ++++++++++++++++++------- 5 files changed, 124 insertions(+), 43 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 93d1119..b262867 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4,9 +4,12 @@ android:versionCode="1" android:versionName="1.0"> + + - + diff --git a/project.properties b/project.properties index 882c28d..663686f 100644 --- a/project.properties +++ b/project.properties @@ -7,6 +7,6 @@ # "ant.properties", and override values to adapt the script to your # project structure. -proguard.config=proguard.cfg +# proguard.config=proguard.cfg # Project target. target=android-8 diff --git a/res/layout/main.xml b/res/layout/main.xml index 2a604b3..1803a66 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -13,7 +13,7 @@ > Обновление... Неудача Последнее обновление + Неудачная попытка января февраля diff --git a/src/org/average/whereami/WhereAmI.java b/src/org/average/whereami/WhereAmI.java index 0f193cd..9d012c3 100644 --- a/src/org/average/whereami/WhereAmI.java +++ b/src/org/average/whereami/WhereAmI.java @@ -1,10 +1,17 @@ package org.average.whereami; import android.app.Activity; +import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.AsyncTask; import android.os.Handler; import android.os.SystemClock; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.Context; import android.content.res.Resources; import android.text.format.Time; import android.util.Log; @@ -15,6 +22,9 @@ import android.widget.TextView; public class WhereAmI extends Activity { + private WifiManager wifiman; + private Integer runningtasks = 0; + private class UpdateTarget { public TextView tv; public Integer updater; // will be the function/object @@ -30,32 +40,6 @@ public class WhereAmI extends Activity private String[] month; private String[] wday; - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); - setContentView(R.layout.main); - res = getResources(); - month = res.getStringArray(R.array.month); - wday = res.getStringArray(R.array.wday); - tvt = (TextView)findViewById(R.id.time); - tvd = (TextView)findViewById(R.id.date); - tvs = (TextView)findViewById(R.id.timestamp); - ut = new UpdateTarget[] { - new UpdateTarget((TextView)findViewById(R.id.location), 1), - new UpdateTarget((TextView)findViewById(R.id.phonecall), 2) - }; - Log.v("WhereAmI", "created UI, about to start update task"); - updateClock.run(); - updateCal.run(); - updateInfo.run(); - Log.v("WhereAmI", "created UI, update task created"); - } - private Handler mHandler = new Handler(); private Runnable updateClock = new Runnable () { @@ -92,34 +76,127 @@ public class WhereAmI extends Activity private Runnable updateInfo = new Runnable () { public void run() { - Log.v("updateInfo", "starting"); - for (int i = 0; i < ut.length; i++) { - ut[i].tv.setText(R.string.updating); - new TimedUpdateTask().execute(ut[i]); + Log.w("WhereAmI", "updateInfo starting"); + IntentFilter intentFilter = + new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); + registerReceiver(connChanged,intentFilter); + boolean wifion = wifiman.setWifiEnabled(true); + Log.w("WhereAmI", "enabling wifi result " + wifion); + mHandler.postDelayed(resetInfo, 30000); + mHandler.postDelayed(this, 60000); + } + }; + + 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 (runningtasks > 0) { + Time tm = new Time(); + tm.setToNow(); + tvs.setText(R.string.failtry); + tvs.append(tm.format(" %d/%m/%Y %H:%M:%S")); } - mHandler.postDelayed(this, 10000); } }; - private class TimedUpdateTask extends AsyncTask { + private final BroadcastReceiver connChanged = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager cm = (ConnectivityManager)context. + getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + boolean isConnected = activeNetwork != null && + activeNetwork.isConnectedOrConnecting(); + Log.w("WhereAmI", "Connectivity changed to " + isConnected); + if (isConnected) { + for (int i = 0; i < ut.length; i++) { + runningtasks++; + ut[i].tv.setText(R.string.updating); + new BgUpdate().execute(ut[i]); + } + } + } + }; + + private class BgUpdate extends AsyncTask { private UpdateTarget ut; @Override protected String doInBackground(UpdateTarget... whereto) { - Log.v("TimedUpdateTask", "starting"); + Log.w("WhereAmI", "BgUpdate starting"); ut = whereto[0]; SystemClock.sleep(5000); // real job do be done here - Log.v("TimedUpdateTask", "about to return"); + Log.w("WhereAmI", "BgUpdate about to return"); return "5 seconds passed"; } @Override protected void onPostExecute(String str) { - Log.v("TimedUpdateTask", "callback executing"); + Log.w("WhereAmI", "BgUpdate callback executing"); ut.tv.setText(str); - Time tm = new Time(); - tm.setToNow(); - tvs.setText(R.string.lasttry); - tvs.append(tm.format(" %d/%m/%Y %H:%M:%S")); + 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) + { + super.onCreate(savedInstanceState); + wifiman = (WifiManager)getSystemService(Context.WIFI_SERVICE); + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + //getWindow().clearFlags(WindowManager.LayoutParams. + // FLAG_FORCE_NOT_FULLSCREEN); + setContentView(R.layout.main); + res = getResources(); + month = res.getStringArray(R.array.month); + wday = res.getStringArray(R.array.wday); + tvt = (TextView)findViewById(R.id.time); + tvd = (TextView)findViewById(R.id.date); + tvs = (TextView)findViewById(R.id.timestamp); + ut = new UpdateTarget[] { + new UpdateTarget((TextView)findViewById(R.id.location), 1), + new UpdateTarget((TextView)findViewById(R.id.phonecall), 2) + }; + Log.w("WhereAmI", "created UI, about to start update task"); + mHandler.post(updateClock); + mHandler.post(updateCal); + mHandler.post(updateInfo); + Log.w("WhereAmI", "created UI, update task created"); + } + + /** Called when put to background */ + @Override + public void onPause() + { + super.onPause(); + Log.w("WhereAmI", "calling finish"); + this.finish(); + } + + /** Called when the activity is destroyed. */ + @Override + public void onDestroy() + { + super.onDestroy(); + Log.w("WhereAmI", "going down"); + mHandler.removeCallbacks(updateClock); + mHandler.removeCallbacks(updateCal); + mHandler.removeCallbacks(updateInfo); + //unregisterReceiver(connChanged); + boolean wifion = wifiman.setWifiEnabled(false); + Log.w("WhereAmI", "disabling wifi result " + wifion); + } } -- 2.39.2