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; + } +}