diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index edb9eff8b..154e6c47b 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -62,6 +62,12 @@
android:resource="@xml/widget_info" />
+
+
+
+
+
+
Connection Error
You are not connected to the internet.
+ There seems to be a problem with the server. Try again later.
+ Your internet connection just got back!
Add checklist
Edit checklist
diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
index 2d69fcdc6..778285ab3 100644
--- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
+++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java
@@ -181,34 +181,39 @@ public class APIHelper implements ErrorHandler, Profiler {
@Override
public Throwable handleError(RetrofitError cause) {
+ final Activity activity = (Activity) this.mContext;
- retrofit.client.Response res = cause.getResponse();
-
- if (res != null) {
- retrofit.mime.TypedInput body = res.getBody();
- }
-
- if (cause.isNetworkError()) {
- final Activity activity = (Activity) this.mContext;
- activity.runOnUiThread(new Runnable() {
- public void run() {
- new AlertDialog.Builder(activity)
- .setTitle(R.string.network_error_title)
- .setMessage(R.string.network_error_no_network_body)
- .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- }
- })
- .setIcon(android.R.drawable.ic_dialog_alert)
- .show();
- }
- });
-
- }
+ if (cause.getKind().equals(RetrofitError.Kind.NETWORK)) {
+ //It also handles timeouts
+ showConnectionProblemDialog(activity, R.string.network_error_no_network_body);
+ }else{
+ /*
+ * CONVERSION An exception was thrown while (de)serializing a body.
+ * HTTP A non-200 HTTP status code was received from the server e.g. 502, 503, etc...
+ * UNEXPECTED An internal error occurred while attempting to execute a request.
+ */
+ showConnectionProblemDialog(activity,R.string.internal_error_api);
+ }
return cause;
}
+ private void showConnectionProblemDialog(final Activity activity, final int resourceMessageString){
+ activity.runOnUiThread(new Runnable() {
+ public void run() {
+ new AlertDialog.Builder(activity)
+ .setTitle(R.string.network_error_title)
+ .setMessage(resourceMessageString)
+ .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ })
+ .setIcon(R.drawable.ic_warning_black)
+ .show();
+ }
+ });
+ }
+
@Override
public Object beforeCall() {
return null;
@@ -227,7 +232,7 @@ public class APIHelper implements ErrorHandler, Profiler {
private class ATaskGetUser extends AsyncTask {
private OnHabitsAPIResult callback;
private HostConfig config;
-
+
public ATaskGetUser(OnHabitsAPIResult callback, HostConfig config) {
this.callback = callback;
this.config=config;
diff --git a/Habitica/src/com/habitrpg/android/habitica/receivers/NetworkChangeReceiver.java b/Habitica/src/com/habitrpg/android/habitica/receivers/NetworkChangeReceiver.java
new file mode 100644
index 000000000..79109d2ee
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/receivers/NetworkChangeReceiver.java
@@ -0,0 +1,36 @@
+package com.habitrpg.android.habitica.receivers;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.widget.Toast;
+
+import com.habitrpg.android.habitica.R;
+
+
+/**
+ * Created by franzejr on 03/11/15.
+ */
+public class NetworkChangeReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(final Context context, Intent intent) {
+ if (hasInternetConnection(context)) {
+ Toast.makeText(context, R.string.network_up, Toast.LENGTH_LONG).show();
+ } else {
+ Toast.makeText(context, R.string.network_error_no_network_body, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ boolean hasInternetConnection(Context context) {
+ ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+
+ if (networkInfo != null && networkInfo.isConnected()) {
+ return true;
+ }
+ return false;
+ }
+}