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