diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 6d8fe2ec9..41478587e 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -50,10 +50,10 @@ dependencies { transitive = true } - compile 'com.android.support:appcompat-v7:23.0.1' - compile 'com.android.support:design:23.0.1' - compile 'com.android.support:gridlayout-v7:23.0.1' - compile 'com.android.support:recyclerview-v7:23.0.1' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:design:23.1.1' + compile 'com.android.support:gridlayout-v7:23.1.1' + compile 'com.android.support:recyclerview-v7:23.1.1' // Image Loading/Caching compile 'com.squareup.picasso:picasso:2.5.2' diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 234ab176f..64874f8ca 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -120,6 +120,13 @@ There seems to be a problem with the server. Try again later. Your internet connection just got back! + Authentication Error + Your Username and/or Password was incorrect. + + Validation Error + You have to fill out all fields. + Invalid email address. + Add checklist Edit checklist Add item… diff --git a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java index 786740046..550350073 100644 --- a/Habitica/src/com/habitrpg/android/habitica/APIHelper.java +++ b/Habitica/src/com/habitrpg/android/habitica/APIHelper.java @@ -184,23 +184,31 @@ public class APIHelper implements ErrorHandler, Profiler { 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; + } else if (cause.getKind().equals(RetrofitError.Kind.HTTP)) { + int status = cause.getResponse().getStatus(); + if (status == 401) { + showConnectionProblemDialog(activity, R.string.authentication_error_title, R.string.authentication_error_body); + return cause; + } else if (status >= 500 && status < 600) { + showConnectionProblemDialog(activity,R.string.internal_error_api); + return cause; + } + } + showConnectionProblemDialog(activity, R.string.internal_error_api); - return cause; + return cause; } - private void showConnectionProblemDialog(final Activity activity, final int resourceMessageString){ + private void showConnectionProblemDialog(final Activity activity, final int resourceMessageString) { + showConnectionProblemDialog(activity, R.string.network_error_title, resourceMessageString); + } + + private void showConnectionProblemDialog(final Activity activity, final int resourceTitleString, final int resourceMessageString){ activity.runOnUiThread(new Runnable() { public void run() { new AlertDialog.Builder(activity) - .setTitle(R.string.network_error_title) + .setTitle(resourceTitleString) .setMessage(resourceMessageString) .setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { diff --git a/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java b/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java index f711d5b29..5d1466f79 100644 --- a/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/LoginActivity.java @@ -159,11 +159,19 @@ public class LoginActivity extends AppCompatActivity email = String.valueOf(mEmail.getText()); password = String.valueOf(mPasswordET.getText()); cpassword = String.valueOf(mConfirmPassword.getText()); + if (username.length() == 0 || password.length() == 0 || email.length() == 0 || cpassword.length() == 0) { + showValidationError(R.string.login_validation_error_fieldsmissing); + return; + } mApiHelper.registerUser(v,username,email,password,cpassword); } else { String username,password; username = String.valueOf(mUsernameET.getText()); password = String.valueOf(mPasswordET.getText()); + if (username.length() == 0 || password.length() == 0) { + showValidationError(R.string.login_validation_error_fieldsmissing); + return; + } mApiHelper.connectUser(username,password, LoginActivity.this); } } @@ -316,4 +324,17 @@ public class LoginActivity extends AppCompatActivity mProgressBar.setVisibility(View.GONE); showSnackbar(getString(R.string.unknown_error)); } + + private void showValidationError(int resourceMessageString) { + mProgressBar.setVisibility(View.GONE); + new android.support.v7.app.AlertDialog.Builder(this) + .setTitle(R.string.login_validation_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(); + } }