jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/331199 )
Change subject: Validate username before proceeding to next step ...................................................................... Validate username before proceeding to next step When creating a new account or logging in, the username is validated before proceeding to the next step. The username should not contain the characters # < > [ ] | { } / @ according to the wikipedia username policy. Bug: T147087 Change-Id: I9e5b81e38a4fc780527023d41dc241de09fcea84 --- M app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java M app/src/main/java/org/wikipedia/login/LoginActivity.java M app/src/main/res/values-qq/strings.xml M app/src/main/res/values/strings.xml 4 files changed, 40 insertions(+), 4 deletions(-) Approvals: jenkins-bot: Verified Mholloway: Looks good to me, approved diff --git a/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java b/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java index 303c9ae..f101268 100644 --- a/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java +++ b/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java @@ -15,8 +15,8 @@ import com.mobsandgeeks.saripaar.ValidationError; import com.mobsandgeeks.saripaar.Validator; import com.mobsandgeeks.saripaar.annotation.ConfirmPassword; -import com.mobsandgeeks.saripaar.annotation.NotEmpty; import com.mobsandgeeks.saripaar.annotation.Password; +import com.mobsandgeeks.saripaar.annotation.Pattern; import org.wikipedia.R; import org.wikipedia.WikipediaApp; @@ -50,7 +50,7 @@ private CreateAccountInfoClient createAccountInfoClient; private CreateAccountClient createAccountClient; - @NotEmpty + @Pattern(regex = "[^#<>\\[\\]|{}\\/@]*", messageResId = R.string.create_account_username_error) private EditText usernameEdit; private PasswordTextInput passwordInput; @Password() diff --git a/app/src/main/java/org/wikipedia/login/LoginActivity.java b/app/src/main/java/org/wikipedia/login/LoginActivity.java index 82a4940..48e689f 100644 --- a/app/src/main/java/org/wikipedia/login/LoginActivity.java +++ b/app/src/main/java/org/wikipedia/login/LoginActivity.java @@ -16,6 +16,10 @@ import android.widget.EditText; import android.widget.TextView; +import com.mobsandgeeks.saripaar.ValidationError; +import com.mobsandgeeks.saripaar.Validator; +import com.mobsandgeeks.saripaar.annotation.Pattern; + import org.wikipedia.R; import org.wikipedia.WikipediaApp; import org.wikipedia.activity.ActivityUtil; @@ -27,7 +31,10 @@ import org.wikipedia.util.log.L; import org.wikipedia.views.NonEmptyValidator; +import java.util.List; + import static org.wikipedia.util.DeviceUtil.hideSoftKeyboard; +import static org.wikipedia.util.FeedbackUtil.setErrorPopup; public class LoginActivity extends ThemedActionBarActivity { public static final int RESULT_LOGIN_SUCCESS = 1; @@ -37,6 +44,7 @@ public static final String EDIT_SESSION_TOKEN = "edit_session_token"; public static final String ACTION_CREATE_ACCOUNT = "action_create_account"; + @Pattern(regex = "[^#<>\\[\\]|{}\\/@]*", messageResId = R.string.create_account_username_error) private EditText usernameText; private EditText passwordText; private View loginButton; @@ -46,6 +54,7 @@ private String loginSource; private LoginClient loginClient; private boolean wentStraightToCreateAccount; + private Validator validator; public static Intent newIntent(@NonNull Context context, @NonNull String source) { return newIntent(context, source, null); @@ -67,6 +76,31 @@ passwordText = ((PasswordTextInput) findViewById(R.id.login_password_input)).getEditText(); View createAccountLink = findViewById(R.id.login_create_account_link); + // We enable the login button as soon as the username and password fields are filled + // Tapping does further validation + validator = new Validator(this); + validator.setValidationListener(new Validator.ValidationListener() { + @Override + public void onValidationSucceeded() { + doLogin(); + } + + @Override + public void onValidationFailed(List<ValidationError> errors) { + for (ValidationError error : errors) { + View view = error.getView(); + String message = error.getCollatedErrorMessage(view.getContext()); + if (view instanceof EditText) { + //Request focus on the EditText before setting error, so that error is visible + view.requestFocus(); + setErrorPopup((EditText) view, message); + } else { + throw new RuntimeException("This should not be happening"); + } + } + } + }); + // Don't allow user to attempt login until they've put in a username and password new NonEmptyValidator(new NonEmptyValidator.ValidationChangedCallback() { @Override @@ -79,7 +113,7 @@ @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { if (actionId == EditorInfo.IME_ACTION_DONE) { - doLogin(); + validator.validate(); return true; } return false; @@ -90,7 +124,7 @@ loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - doLogin(); + validator.validate(); } }); diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index c1b731c..301aee2 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -132,6 +132,7 @@ <string name="create_account_password_repeat_hint">{{Identical|Repeat password}}</string> <string name="create_account_passwords_mismatch_error">{{Identical|Passwords do not match}}</string> <string name="create_account_email_error">Used as an error message on creating a user account where the email address the user entered does not appear to be a valid email address.</string> + <string name="create_account_username_error">Used as an error message on logging in or creating a user account where the username entered does not appear to be valid.</string> <string name="create_account_generic_error">Used as a generic error message during account creation when a more specific error message cannot be given to the user.</string> <string name="create_account_next">Button text on Create Account screen to go \"next\" (to CAPTCHA). {{Identical|Next}}</string> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eba5577..d1d5131 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -100,6 +100,7 @@ <string name="create_account_password_repeat_hint">Repeat password</string> <string name="create_account_passwords_mismatch_error">Passwords don\'t match</string> <string name="create_account_email_error">Invalid email address</string> + <string name="create_account_username_error">Invalid characters in username</string> <string name="create_account_generic_error">Could not create account</string> <string name="create_account_next">Next</string> <string name="create_account_button">Create account</string> -- To view, visit https://gerrit.wikimedia.org/r/331199 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I9e5b81e38a4fc780527023d41dc241de09fcea84 Gerrit-PatchSet: 5 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: OdysseasKr <odysseask...@gmail.com> Gerrit-Reviewer: BearND <bsitzm...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: Mholloway <mhollo...@wikimedia.org> Gerrit-Reviewer: Niedzielski <sniedziel...@wikimedia.org> Gerrit-Reviewer: OdysseasKr <odysseask...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits