Show error when user pulls to refresh without network connection

Bug: 32012818
Test: Manually test when network is connected/not connected.
Change-Id: Ic6aabc8c52dca0886f28dda136f7e6e265cfe1f5
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f92d80f..8ac6f3f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1833,4 +1833,7 @@
 
     <!-- Confirm button text for dialog to turn auto-sync on [CHAR LIMIT=30] -->
     <string name="turn_auto_sync_on_dialog_confirm_btn">Turn on</string>
+
+    <!-- No network connection error message [CHAR LIMIT=50] -->
+    <string name="connection_error_message">No connection</string>
 </resources>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 0d4b4c0..a73d8e7 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -182,6 +182,10 @@
         }
     }
 
+    public void showConnectionErrorMsg() {
+        Snackbar.make(mLayoutRoot, R.string.connection_error_message, Snackbar.LENGTH_LONG).show();
+    }
+
     private final ContactListFilterListener mFilterListener = new ContactListFilterListener() {
         @Override
         public void onContactListFilterChanged() {
@@ -729,7 +733,6 @@
                 }).show();
     }
 
-
     private class SaveServiceListener extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index a748c06..7a99705 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -57,6 +57,7 @@
 import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter;
+import com.android.contacts.activities.PeopleActivity;
 import com.android.contacts.common.Experiments;
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.list.ContactEntryListFragment;
@@ -548,6 +549,14 @@
             @Override
             public void onRefresh() {
                 mHandler.removeCallbacks(mCancelRefresh);
+
+                final boolean isNetworkConnected = SyncUtil.isNetworkConnected(getContext());
+                if (!isNetworkConnected) {
+                    mSwipeRefreshLayout.setRefreshing(false);
+                    ((PeopleActivity)getActivity()).showConnectionErrorMsg();
+                    return;
+                }
+
                 syncContacts(getFilter());
                 mHandler.postDelayed(mCancelRefresh, Flags.getInstance(getContext())
                         .getInteger(Experiments.PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS));
@@ -570,6 +579,7 @@
         if (filter == null) {
             return;
         }
+
         final Bundle bundle = new Bundle();
         bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
         bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
diff --git a/src/com/android/contacts/util/SyncUtil.java b/src/com/android/contacts/util/SyncUtil.java
index 6c17c05..34e6e8c 100644
--- a/src/com/android/contacts/util/SyncUtil.java
+++ b/src/com/android/contacts/util/SyncUtil.java
@@ -18,6 +18,8 @@
 import android.accounts.Account;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.provider.ContactsContract;
 
 import com.android.contacts.common.model.account.GoogleAccountType;
@@ -90,4 +92,11 @@
         }
         return SYNC_SETTING_SYNC_ON;
     }
+
+    public static boolean isNetworkConnected(Context context) {
+        ConnectivityManager cm =
+                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
+    }
 }
\ No newline at end of file