From be66fb7a92f19a022d50c9b7ea3d8c39b988ccd3 Mon Sep 17 00:00:00 2001 From: Cristian Piacente Date: Thu, 5 Jan 2012 23:51:44 +0100 Subject: [PATCH] added notification for no data connection status --- res/layout/notification_progress_bar.xml | 9 +++ res/values-it/strings.xml | 1 + res/values/strings.xml | 1 + .../locast/sync/LocastSyncService.java | 19 ++++--- .../locast/ver2/browser/BrowserHome.java | 57 +++++++++++++++++-- .../android/locast/ver2/casts/CastDetail.java | 33 +++++++++++ .../ver2/casts/LocatableListWithMap.java | 33 +++++++++++ .../ver2/itineraries/ItineraryDetail.java | 34 +++++++++++ .../ver2/itineraries/ItineraryList.java | 35 +++++++++++- .../NetworkStatusBroadcastReceiver.java | 25 ++++++++ .../widget/NotificationProgressBar.java | 27 ++++++++- .../mobile/android/widget/RefreshButton.java | 2 +- 12 files changed, 261 insertions(+), 15 deletions(-) create mode 100644 src/edu/mit/mobile/android/widget/NetworkStatusBroadcastReceiver.java diff --git a/res/layout/notification_progress_bar.xml b/res/layout/notification_progress_bar.xml index 719d58f..714e289 100644 --- a/res/layout/notification_progress_bar.xml +++ b/res/layout/notification_progress_bar.xml @@ -22,5 +22,14 @@ android:layout_weight="1" android:spacing="0dip" android:text="@string/error_no_featured_casts" /> + \ No newline at end of file diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 655afd3..826c17c 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -125,4 +125,5 @@ Errore di protocollo Network: %1$s Caricamento video... Caricamento dati... + Connessione a internet necessaria per caricare i contenuti. Riprovare con connessione dati attiva diff --git a/res/values/strings.xml b/res/values/strings.xml index 0f9f45f..e03488c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -210,4 +210,5 @@ Error: camera did not return an image. Please try again. Tap the buttons below to add photos and videos Loading data... + You need a data connection to load this content. Please try again with data enabled diff --git a/src/edu/mit/mobile/android/locast/sync/LocastSyncService.java b/src/edu/mit/mobile/android/locast/sync/LocastSyncService.java index 715aa6a..cf9258e 100644 --- a/src/edu/mit/mobile/android/locast/sync/LocastSyncService.java +++ b/src/edu/mit/mobile/android/locast/sync/LocastSyncService.java @@ -51,6 +51,7 @@ import edu.mit.mobile.android.locast.data.SyncException; import edu.mit.mobile.android.locast.net.NetworkClient; import edu.mit.mobile.android.locast.net.NetworkProtocolException; +import edu.mit.mobile.android.widget.NotificationProgressBar; /** * A wrapper to {@link SyncEngine} which provides the interface to the @@ -85,7 +86,7 @@ public class LocastSyncService extends Service { * @see #startSync(Account, Uri, boolean, Bundle) */ public static void startSync(Context context, Uri what) { - startSync(Authenticator.getFirstAccount(context), what, false, new Bundle()); + startSync(context,Authenticator.getFirstAccount(context), what, false, new Bundle()); } /** @@ -97,7 +98,7 @@ public static void startSync(Context context, Uri what) { * @see #startSync(Account, Uri, boolean, Bundle) */ public static void startSync(Context context, Uri what, boolean explicitSync) { - startSync(Authenticator.getFirstAccount(context), what, explicitSync, new Bundle()); + startSync(context,Authenticator.getFirstAccount(context), what, explicitSync, new Bundle()); } /** @@ -108,14 +109,14 @@ public static void startSync(Context context, Uri what, boolean explicitSync) { * @see #startSync(Account, Uri, boolean, Bundle) */ public static void startSync(Context context, Uri what, boolean explicitSync, Bundle extras) { - startSync(Authenticator.getFirstAccount(context), what, explicitSync, extras); + startSync(context,Authenticator.getFirstAccount(context), what, explicitSync, extras); } public static void startExpeditedAutomaticSync(Context context, Uri what){ final Bundle extras = new Bundle(); extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true); - startSync(Authenticator.getFirstAccount(context), what, false, extras); + startSync(context,Authenticator.getFirstAccount(context), what, false, extras); } /** @@ -136,7 +137,7 @@ public static void startSync(Context context, Uri httpPubUrl, Uri destination, final Bundle b = new Bundle(); b.putString(SyncEngine.EXTRA_DESTINATION_URI, destination.toString()); - startSync(Authenticator.getFirstAccount(context), httpPubUrl, explicitSync, b); + startSync(context,Authenticator.getFirstAccount(context), httpPubUrl, explicitSync, b); } /** @@ -147,10 +148,10 @@ public static void startSync(Context context, Uri httpPubUrl, Uri destination, * @param explicitSync * @see #startSync(Account, Uri, boolean, Bundle) */ - public static void startSync(Account account, Uri what, boolean explicitSync) { + public static void startSync(Context context,Account account, Uri what, boolean explicitSync) { final Bundle b = new Bundle(); - startSync(account, what, explicitSync, b); + startSync(context,account, what, explicitSync, b); } /** @@ -166,7 +167,7 @@ public static void startSync(Account account, Uri what, boolean explicitSync) { * the extras * @param extras */ - public static void startSync(Account account, Uri what, boolean explicitSync, Bundle extras) { + public static void startSync(Context context,Account account, Uri what, boolean explicitSync, Bundle extras) { if (explicitSync) { extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); if (!extras.containsKey(ContentResolver.SYNC_EXTRAS_EXPEDITED)) { @@ -188,6 +189,8 @@ public static void startSync(Account account, Uri what, boolean explicitSync, Bu Log.d(TAG, "requesting sync for "+account + " with extras: "+extras); } ContentResolver.requestSync(account, MediaProvider.AUTHORITY, extras); + context.sendBroadcast(new Intent(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS)); + } @Override diff --git a/src/edu/mit/mobile/android/locast/ver2/browser/BrowserHome.java b/src/edu/mit/mobile/android/locast/ver2/browser/BrowserHome.java index 84516cb..798e265 100644 --- a/src/edu/mit/mobile/android/locast/ver2/browser/BrowserHome.java +++ b/src/edu/mit/mobile/android/locast/ver2/browser/BrowserHome.java @@ -19,9 +19,14 @@ */ import android.app.Dialog; +import android.content.BroadcastReceiver; import android.content.ContentResolver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.database.Cursor; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -55,6 +60,7 @@ import edu.mit.mobile.android.locast.sync.LocastSyncStatusObserver; import edu.mit.mobile.android.locast.ver2.R; import edu.mit.mobile.android.locast.ver2.casts.LocatableListWithMap; +import edu.mit.mobile.android.widget.NetworkStatusBroadcastReceiver; import edu.mit.mobile.android.widget.NotificationProgressBar; import edu.mit.mobile.android.widget.RefreshButton; @@ -77,6 +83,8 @@ public class BrowserHome extends FragmentActivity implements LoaderManager.Loade private static final int LOADER_FEATURED_CASTS = 0; private static final int DIALOG_LOGOUT = 100; + + private static NetworkStatusBroadcastReceiver mNetworkBroadcastReceiver; private final Handler mHandler = new Handler() { @Override @@ -97,6 +105,27 @@ public void handleMessage(Message msg) { mProgressBar.showProgressBar(false); mRefresh.setRefreshing(false); break; + case NetworkStatusBroadcastReceiver.MSG_NETWORK_STATE: + if (Constants.DEBUG) { + Log.d(TAG, "Network state changed"); + } + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } + break; } }; }; @@ -106,11 +135,28 @@ public void handleMessage(Message msg) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + mNetworkBroadcastReceiver=new NetworkStatusBroadcastReceiver(this, mHandler); mImageCache = ImageCache.getInstance(this); setContentView(R.layout.browser_main); mProgressBar =(NotificationProgressBar) (findViewById(R.id.progressNotification)); + mRefresh = (RefreshButton) findViewById(R.id.refresh); + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } if (Constants.USE_APPUPDATE_CHECKER) { mAppUpdateChecker = new AppUpdateChecker(this, getString(R.string.app_update_url), new AppUpdateChecker.OnUpdateDialog(this, getString(R.string.app_name))); @@ -130,7 +176,7 @@ protected void onCreate(Bundle savedInstanceState) { final LoaderManager lm = getSupportLoaderManager(); lm.initLoader(LOADER_FEATURED_CASTS, null, this); - mRefresh = (RefreshButton) findViewById(R.id.refresh); + mRefresh.setOnClickListener(this); findViewById(R.id.itineraries).setOnClickListener(this); findViewById(R.id.events).setOnClickListener(this); @@ -149,7 +195,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onPause() { super.onPause(); - + this.unregisterReceiver(mNetworkBroadcastReceiver); if (mSyncHandle != null) { ContentResolver.removeStatusChangeListener(mSyncHandle); } @@ -158,10 +204,13 @@ protected void onPause() { @Override protected void onResume() { super.onResume(); + IntentFilter intentFilter=new IntentFilter(); + intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); + intentFilter.addAction(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS); + this.registerReceiver(mNetworkBroadcastReceiver, intentFilter); mSyncHandle = ContentResolver.addStatusChangeListener(0xff, new LocastSyncStatusObserver( this, mHandler)); LocastSyncStatusObserver.notifySyncStatusToHandler(this, mHandler); - if (shouldRefresh) { refresh(false); } diff --git a/src/edu/mit/mobile/android/locast/ver2/casts/CastDetail.java b/src/edu/mit/mobile/android/locast/ver2/casts/CastDetail.java index 388aa16..71c5a4f 100644 --- a/src/edu/mit/mobile/android/locast/ver2/casts/CastDetail.java +++ b/src/edu/mit/mobile/android/locast/ver2/casts/CastDetail.java @@ -24,7 +24,10 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.database.Cursor; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -59,6 +62,7 @@ import edu.mit.mobile.android.locast.ver2.R; import edu.mit.mobile.android.locast.ver2.itineraries.LocatableItemOverlay; import edu.mit.mobile.android.locast.widget.FavoriteClickHandler; +import edu.mit.mobile.android.widget.NetworkStatusBroadcastReceiver; import edu.mit.mobile.android.widget.NotificationProgressBar; import edu.mit.mobile.android.widget.RefreshButton; import edu.mit.mobile.android.widget.ValidatingCheckBox; @@ -79,6 +83,8 @@ public class CastDetail extends LocatableDetail implements LoaderManager.LoaderC private Uri mCastMediaUri; private static final int REQUEST_SIGNIN = 0; + + private static NetworkStatusBroadcastReceiver mNetworkBroadcastReceiver; private static final String[] CAST_PROJECTION = ArrayUtils.concat(new String[] { Cast._ID, Cast._TITLE, Cast._AUTHOR, Cast._DESCRIPTION, Cast._FAVORITED }, @@ -109,6 +115,27 @@ public void handleMessage(Message msg) { mProgressBar.showProgressBar(false); mRefresh.setRefreshing(false); break; + case NetworkStatusBroadcastReceiver.MSG_NETWORK_STATE: + if (Constants.DEBUG) { + Log.d(TAG, "Network state changed"); + } + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } + break; } }; }; @@ -119,6 +146,7 @@ public void handleMessage(Message msg) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mNetworkBroadcastReceiver=new NetworkStatusBroadcastReceiver(this, mHandler); setContentView(R.layout.cast_detail); initOverlays(); @@ -161,6 +189,7 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void onPause() { super.onPause(); + this.unregisterReceiver(mNetworkBroadcastReceiver); if (mSyncHandle != null) { ContentResolver.removeStatusChangeListener(mSyncHandle); } @@ -169,6 +198,10 @@ protected void onPause() { @Override protected void onResume() { super.onResume(); + IntentFilter intentFilter=new IntentFilter(); + intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); + intentFilter.addAction(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS); + this.registerReceiver(mNetworkBroadcastReceiver, intentFilter); mSyncHandle = ContentResolver.addStatusChangeListener(0xff, new LocastSyncStatusObserver( this, mHandler)); LocastSyncStatusObserver.notifySyncStatusToHandler(this, mHandler); diff --git a/src/edu/mit/mobile/android/locast/ver2/casts/LocatableListWithMap.java b/src/edu/mit/mobile/android/locast/ver2/casts/LocatableListWithMap.java index b2b9df4..7cf1762 100644 --- a/src/edu/mit/mobile/android/locast/ver2/casts/LocatableListWithMap.java +++ b/src/edu/mit/mobile/android/locast/ver2/casts/LocatableListWithMap.java @@ -22,10 +22,13 @@ import android.content.ContentUris; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.database.Cursor; import android.location.Criteria; import android.location.Location; import android.location.LocationManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -66,6 +69,7 @@ import edu.mit.mobile.android.locast.ver2.events.EventCursorAdapter; import edu.mit.mobile.android.locast.ver2.itineraries.BasicLocatableOverlay; import edu.mit.mobile.android.locast.ver2.itineraries.LocatableItemOverlay; +import edu.mit.mobile.android.widget.NetworkStatusBroadcastReceiver; import edu.mit.mobile.android.widget.NotificationProgressBar; import edu.mit.mobile.android.widget.RefreshButton; @@ -87,6 +91,8 @@ public class LocatableListWithMap extends MapFragmentActivity implements LoaderM private long mLastUpdate; private ImageCache mImageCache; + + private static NetworkStatusBroadcastReceiver mNetworkBroadcastReceiver; // constants related to auto-refreshing private static long AUTO_UPDATE_FREQUENCY = 15 * 1000 * 1000; // nano-seconds @@ -125,6 +131,27 @@ public void handleMessage(Message msg) { mProgressBar.showProgressBar(false); mRefresh.setRefreshing(false); break; + case NetworkStatusBroadcastReceiver.MSG_NETWORK_STATE: + if (Constants.DEBUG) { + Log.d(TAG, "Network state changed"); + } + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } + break; } }; }; @@ -132,6 +159,7 @@ public void handleMessage(Message msg) { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mNetworkBroadcastReceiver=new NetworkStatusBroadcastReceiver(this, mHandler); setContentView(R.layout.map_list_activity); mProgressBar =(NotificationProgressBar) (findViewById(R.id.progressNotification)); findViewById(R.id.refresh).setOnClickListener(this); @@ -217,6 +245,10 @@ public void onCreate(Bundle savedInstanceState) { @Override protected void onResume() { super.onResume(); + IntentFilter intentFilter=new IntentFilter(); + intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); + intentFilter.addAction(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS); + this.registerReceiver(mNetworkBroadcastReceiver, intentFilter); if (actionSearchNearby) { mMyLocationOverlay.enableMyLocation(); } @@ -228,6 +260,7 @@ protected void onResume() { @Override protected void onPause() { super.onPause(); + this.unregisterReceiver(mNetworkBroadcastReceiver); if (actionSearchNearby) { mMyLocationOverlay.disableMyLocation(); } diff --git a/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryDetail.java b/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryDetail.java index d97b24e..c469c2a 100644 --- a/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryDetail.java +++ b/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryDetail.java @@ -23,9 +23,13 @@ import android.content.ContentResolver; import android.content.ContentUris; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.database.Cursor; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -65,6 +69,7 @@ import edu.mit.mobile.android.locast.sync.LocastSyncService; import edu.mit.mobile.android.locast.sync.LocastSyncStatusObserver; import edu.mit.mobile.android.locast.ver2.R; +import edu.mit.mobile.android.widget.NetworkStatusBroadcastReceiver; import edu.mit.mobile.android.widget.NotificationProgressBar; import edu.mit.mobile.android.widget.RefreshButton; @@ -107,6 +112,8 @@ public class ItineraryDetail extends MapFragmentActivity implements LoaderManage private Object mSyncHandle; private NotificationProgressBar mProgressBar; + + private static NetworkStatusBroadcastReceiver mNetworkBroadcastReceiver; private final Handler mHandler = new Handler(){ @Override @@ -127,6 +134,27 @@ public void handleMessage(Message msg) { mProgressBar.showProgressBar(false); mRefresh.setRefreshing(false); break; + case NetworkStatusBroadcastReceiver.MSG_NETWORK_STATE: + if (Constants.DEBUG) { + Log.d(TAG, "Network state changed"); + } + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } + break; } }; }; @@ -136,6 +164,7 @@ protected void onCreate(Bundle icicle) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(icicle); + mNetworkBroadcastReceiver=new NetworkStatusBroadcastReceiver(this, mHandler); setContentView(R.layout.itinerary_detail); mProgressBar =(NotificationProgressBar) (findViewById(R.id.progressNotification)); @@ -197,12 +226,17 @@ protected void onCreate(Bundle icicle) { protected void onResume() { mFirstLoadSync = true; super.onResume(); + IntentFilter intentFilter=new IntentFilter(); + intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); + intentFilter.addAction(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS); + this.registerReceiver(mNetworkBroadcastReceiver, intentFilter); mSyncHandle = ContentResolver.addStatusChangeListener(0xff, new LocastSyncStatusObserver(this, mHandler)); LocastSyncStatusObserver.notifySyncStatusToHandler(this, mHandler); } @Override protected void onPause() { super.onPause(); + this.unregisterReceiver(mNetworkBroadcastReceiver); if (mSyncHandle != null){ ContentResolver.removeStatusChangeListener(mSyncHandle); } diff --git a/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryList.java b/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryList.java index b5c70cb..97ca156 100644 --- a/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryList.java +++ b/src/edu/mit/mobile/android/locast/ver2/itineraries/ItineraryList.java @@ -20,8 +20,12 @@ import android.content.ContentResolver; import android.content.ContentUris; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.database.Cursor; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -56,6 +60,7 @@ import edu.mit.mobile.android.locast.sync.LocastSyncService; import edu.mit.mobile.android.locast.sync.LocastSyncStatusObserver; import edu.mit.mobile.android.locast.ver2.R; +import edu.mit.mobile.android.widget.NetworkStatusBroadcastReceiver; import edu.mit.mobile.android.widget.NotificationProgressBar; import edu.mit.mobile.android.widget.RefreshButton; @@ -93,6 +98,8 @@ public class ItineraryList extends FragmentActivity implements private Object mSyncHandle; private NotificationProgressBar mProgressBar; + + private static NetworkStatusBroadcastReceiver mNetworkBroadcastReceiver; private final Handler mHandler = new Handler() { @Override @@ -113,6 +120,27 @@ public void handleMessage(Message msg) { mProgressBar.showProgressBar(false); mRefresh.setRefreshing(false); break; + case NetworkStatusBroadcastReceiver.MSG_NETWORK_STATE: + if (Constants.DEBUG) { + Log.d(TAG, "Network state changed"); + } + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if (netInfo != null && netInfo.isConnectedOrConnecting()) { + if (Constants.DEBUG) { + Log.d(TAG, "Network state connecting"); + } + mProgressBar.setNetworkStatus(true); + mRefresh.setRefreshing(true); + } + else{ + if (Constants.DEBUG) { + Log.d(TAG, "Network state not connecting"); + } + mProgressBar.setNetworkStatus(false); + mRefresh.setRefreshing(false); + } + break; } }; }; @@ -120,6 +148,7 @@ public void handleMessage(Message msg) { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mNetworkBroadcastReceiver=new NetworkStatusBroadcastReceiver(this, mHandler); setContentView(R.layout.simple_list_activity); mProgressBar =(NotificationProgressBar) (findViewById(R.id.progressNotification)); @@ -163,7 +192,10 @@ public void onCreate(Bundle savedInstanceState) { @Override protected void onResume() { super.onResume(); - + IntentFilter intentFilter=new IntentFilter(); + intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); + intentFilter.addAction(NotificationProgressBar.INTENT_UPDATE_NETWORK_STATUS); + this.registerReceiver(mNetworkBroadcastReceiver, intentFilter); mSyncWhenLoaded = true; mSyncHandle = ContentResolver.addStatusChangeListener(0xff, new LocastSyncStatusObserver( this, mHandler)); @@ -173,6 +205,7 @@ protected void onResume() { @Override protected void onPause() { super.onPause(); + this.unregisterReceiver(mNetworkBroadcastReceiver); if (mSyncHandle != null) { ContentResolver.removeStatusChangeListener(mSyncHandle); } diff --git a/src/edu/mit/mobile/android/widget/NetworkStatusBroadcastReceiver.java b/src/edu/mit/mobile/android/widget/NetworkStatusBroadcastReceiver.java new file mode 100644 index 0000000..d8b8e58 --- /dev/null +++ b/src/edu/mit/mobile/android/widget/NetworkStatusBroadcastReceiver.java @@ -0,0 +1,25 @@ +package edu.mit.mobile.android.widget; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Handler; + +public class NetworkStatusBroadcastReceiver extends BroadcastReceiver{ + Context mContext; + Handler mHandler; + + public static final int MSG_NETWORK_STATE=400; + + private static final String TAG = NetworkStatusBroadcastReceiver.class.getSimpleName(); + + public NetworkStatusBroadcastReceiver(Context context,Handler handler) { + this.mContext=context; + this.mHandler=handler; + } + @Override + public void onReceive(Context context, Intent intent) { + mHandler.sendEmptyMessage(MSG_NETWORK_STATE); + } + +} diff --git a/src/edu/mit/mobile/android/widget/NotificationProgressBar.java b/src/edu/mit/mobile/android/widget/NotificationProgressBar.java index e39c040..880c36e 100644 --- a/src/edu/mit/mobile/android/widget/NotificationProgressBar.java +++ b/src/edu/mit/mobile/android/widget/NotificationProgressBar.java @@ -14,6 +14,9 @@ public class NotificationProgressBar extends LinearLayout { String textID; private ProgressBar mProgressBar; private TextView mTextView; + private TextView mNoDataTextView; + public static boolean online=true; + public static String INTENT_UPDATE_NETWORK_STATUS="edu.mit.mobile.android.widget.NotificationProgressBar.update"; public NotificationProgressBar(Context context, AttributeSet attrs) { super(context, attrs); @@ -24,8 +27,10 @@ public NotificationProgressBar(Context context, AttributeSet attrs) { v=inflater.inflate(R.layout.notification_progress_bar,this); } mProgressBar=(ProgressBar)findViewById(R.id.progressBar); + mNoDataTextView=(TextView)findViewById(R.id.noDataTextView); mTextView=(TextView)findViewById(R.id.emptyTextView); mTextView.setText(textID); + updateNetworkStatus(); } public NotificationProgressBar(Context context) { super(context); @@ -40,9 +45,29 @@ private void init(AttributeSet attrs) { textID = a.getString(R.styleable.NotificationProgressBar_android_text); a.recycle(); } - public void showProgressBar(boolean b){ + public synchronized void showProgressBar(boolean b){ mProgressBar.setVisibility((b?View.VISIBLE:View.GONE)); mTextView.setVisibility(((!b)?View.VISIBLE:View.GONE)); + mNoDataTextView.setVisibility((View.GONE)); + postInvalidate(); + } + public synchronized void setNetworkStatus(boolean online){ + NotificationProgressBar.online=online; + updateNetworkStatus(); + } + public void updateNetworkStatus(){ + if(!online){ + mProgressBar.setVisibility(View.GONE); + mTextView.setVisibility(View.GONE); + mNoDataTextView.setVisibility((View.VISIBLE)); + } + else{ + if(mProgressBar.getVisibility()==View.GONE && mTextView.getVisibility()==View.GONE){ + mProgressBar.setVisibility(View.VISIBLE); + mTextView.setVisibility(View.GONE); + mNoDataTextView.setVisibility((View.GONE)); + } + } postInvalidate(); } } diff --git a/src/edu/mit/mobile/android/widget/RefreshButton.java b/src/edu/mit/mobile/android/widget/RefreshButton.java index f932d63..ce7d128 100644 --- a/src/edu/mit/mobile/android/widget/RefreshButton.java +++ b/src/edu/mit/mobile/android/widget/RefreshButton.java @@ -75,7 +75,7 @@ private void startAnimating(){ public void setRefreshing(boolean isRefreshing){ if (isRefreshing){ - setEnabled(false); + //setEnabled(false); setImageDrawable(mRefreshingDrawable); startAnimating(); }else{