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

Reply via email to