Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/125982

Change subject: Fix Account Creation not working
......................................................................

Fix Account Creation not working

Change-Id: I8a9bbf3e63086fb016121552b57e1210ac6d821c
---
M wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
A 
wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountCaptchaResult.java
M wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTask.java
D 
wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenResult.java
6 files changed, 80 insertions(+), 83 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/82/125982/1

diff --git 
a/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java 
b/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
index ffbed67..defc1c0 100644
--- a/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
+++ b/wikipedia-it/src/main/java/org/wikipedia/test/CreateAccountTokenTest.java
@@ -30,8 +30,8 @@
                 new CreateAccountTask(getInstrumentation().getTargetContext(), 
username, password, null, null) {
                     @Override
                     public void onFinish(CreateAccountResult baseResult) {
-                        assertTrue(baseResult instanceof 
CreateAccountTokenResult);
-                        CreateAccountTokenResult result = 
(CreateAccountTokenResult)baseResult;
+                        assertTrue(baseResult instanceof 
CreateAccountCaptchaResult);
+                        CreateAccountCaptchaResult result = 
(CreateAccountCaptchaResult)baseResult;
                         assertNotNull(result);
                         assertNotNull(result.getCaptchaResult());
                         assertFalse(TextUtils.isEmpty(result.getToken()));
diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
index 03b4276..842e6e9 100644
--- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java
@@ -133,6 +133,15 @@
         return primarySite;
     }
 
+    /**
+     * Convenience method to get an API object for the primary site.
+     *
+     * @return An API object that is equivalent to calling 
getAPIForSite(getPrimarySite)
+     */
+    public Api getPrimarySiteApi() {
+        return getAPIForSite(getPrimarySite());
+    }
+
     private String primaryLanguage;
     public String getPrimaryLanguage() {
         if (primaryLanguage == null) {
diff --git 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
index 6035e76..25eafeb 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
@@ -99,8 +99,8 @@
 
         if (savedInstanceState != null && 
savedInstanceState.containsKey("result")) {
             createAccountResult = savedInstanceState.getParcelable("result");
-            if (createAccountResult instanceof CreateAccountTokenResult) {
-                captchaHandler.handleCaptcha(((CreateAccountTokenResult) 
createAccountResult).getCaptchaResult());
+            if (createAccountResult instanceof CreateAccountCaptchaResult) {
+                captchaHandler.handleCaptcha(((CreateAccountCaptchaResult) 
createAccountResult).getCaptchaResult());
             }
         }
 
@@ -135,14 +135,11 @@
     }
 
     public void doCreateAccount() {
-        String token = null, email = null;
-        if (createAccountResult != null && createAccountResult instanceof 
CreateAccountTokenResult) {
-            token = ((CreateAccountTokenResult) 
createAccountResult).getToken();
-        }
+        String email = null;
         if (emailEdit.getText().length() != 0) {
             email = emailEdit.getText().toString();
         }
-        new CreateAccountTask(this, usernameEdit.getText().toString(), 
passwordEdit.getText().toString(), email, token) {
+        new CreateAccountTask(this, usernameEdit.getText().toString(), 
passwordEdit.getText().toString(), email) {
             @Override
             public void onBeforeExecute() {
                 progressDialog.show();
@@ -150,7 +147,7 @@
 
             @Override
             public RequestBuilder buildRequest(Api api) {
-                if (createAccountResult != null && createAccountResult 
instanceof CreateAccountTokenResult) {
+                if (createAccountResult != null && createAccountResult 
instanceof CreateAccountCaptchaResult) {
                    return 
captchaHandler.populateBuilder(super.buildRequest(api));
                 }
                 return super.buildRequest(api);
@@ -159,8 +156,8 @@
             @Override
             public void onFinish(final CreateAccountResult result) {
                 createAccountResult = result;
-                if (result instanceof CreateAccountTokenResult) {
-                    
captchaHandler.handleCaptcha(((CreateAccountTokenResult)result).getCaptchaResult());
+                if (result instanceof CreateAccountCaptchaResult) {
+                    
captchaHandler.handleCaptcha(((CreateAccountCaptchaResult)result).getCaptchaResult());
                 } else {
                     progressDialog.dismiss();
                     captchaHandler.cancelCaptcha();
diff --git 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountCaptchaResult.java
 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountCaptchaResult.java
new file mode 100644
index 0000000..510debe
--- /dev/null
+++ 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountCaptchaResult.java
@@ -0,0 +1,40 @@
+package org.wikipedia.createaccount;
+
+import android.os.*;
+import org.wikipedia.editing.*;
+
+public class CreateAccountCaptchaResult extends CreateAccountResult {
+    private final CaptchaResult captchaResult;
+
+    public CreateAccountCaptchaResult(CaptchaResult captchaResult) {
+        super("NeedCaptcha");
+        this.captchaResult = captchaResult;
+    }
+
+    public CaptchaResult getCaptchaResult() {
+        return captchaResult;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        super.writeToParcel(parcel, flags);
+        parcel.writeParcelable(captchaResult, flags);
+    }
+
+    private CreateAccountCaptchaResult(Parcel in) {
+        super(in);
+        captchaResult = 
in.readParcelable(CaptchaResult.class.getClassLoader());
+    }
+
+    public static final Parcelable.Creator<CreateAccountCaptchaResult> CREATOR
+            = new Parcelable.Creator<CreateAccountCaptchaResult>() {
+        public CreateAccountCaptchaResult createFromParcel(Parcel in) {
+            return new CreateAccountCaptchaResult(in);
+        }
+
+        public CreateAccountCaptchaResult[] newArray(int size) {
+            return new CreateAccountCaptchaResult[size];
+        }
+    };
+
+}
diff --git 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTask.java 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTask.java
index 944ad8e..5985d9c 100644
--- a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTask.java
@@ -7,25 +7,21 @@
 import org.wikipedia.*;
 import org.wikipedia.editing.*;
 
-public class CreateAccountTask extends ApiTask<CreateAccountResult> {
-
-
+abstract public class CreateAccountTask extends ApiTask<CreateAccountResult> {
     private final String username;
     private final String password;
     private final String email;
-    private final String token;
-    public CreateAccountTask(Context context, String username, String 
password, String email, String token) {
-        super(
-                1,
-                ((WikipediaApp)context.getApplicationContext()).getAPIForSite(
-                        
((WikipediaApp)context.getApplicationContext()).getPrimarySite()
-                )
-        );
+
+    private String token;
+
+    public CreateAccountTask(Context context, String username, String 
password, String email) {
+        super(1, 
((WikipediaApp)context.getApplicationContext()).getPrimarySiteApi());
+
         this.username = username;
         this.password = password;
         this.email = email;
-        this.token = token;
     }
+
     @Override
     public RequestBuilder buildRequest(Api api) {
         RequestBuilder builder = api.action("createaccount")
@@ -46,19 +42,22 @@
     }
 
     @Override
-    public CreateAccountResult processResult(ApiResult response) throws 
Throwable {
-        Log.d("Wikipedia", response.asObject().toString(4));
-        if (response.asObject().has("error")) {
-            return new 
CreateAccountResult(response.asObject().optJSONObject("error").optString("code"));
+    public CreateAccountResult processResult(ApiResult result) throws 
Throwable {
+        Log.d("Wikipedia", result.asObject().toString(4));
+        if (result.asObject().has("error")) {
+            return new 
CreateAccountResult(result.asObject().optJSONObject("error").optString("code"));
         }
-        JSONObject ca = response.asObject().optJSONObject("createaccount");
-        String result = ca.optString("result");
-        if (result.toLowerCase().equals("needtoken")) {
-            String token = ca.optString("token");
-            CaptchaResult captchaResult = new 
CaptchaResult(ca.optJSONObject("captcha").optString("id"));
-            return new CreateAccountTokenResult(captchaResult, token);
+        JSONObject ca = result.asObject().optJSONObject("createaccount");
+        String apiResult = ca.optString("result");
+        if (apiResult.equals("NeedToken")) {
+            // We need to just repeat the request.
+            // Set token and restart the request
+            token = ca.optString("token");
+            return performTask();
+        } else if (apiResult.equals("NeedCaptcha")) {
+            return new CreateAccountCaptchaResult(new 
CaptchaResult(ca.optJSONObject("captcha").optString("id")));
         } else {
-            return new CreateAccountResult(result);
+            return new CreateAccountResult(apiResult);
         }
     }
 }
diff --git 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenResult.java
 
b/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenResult.java
deleted file mode 100644
index d4ffac9..0000000
--- 
a/wikipedia/src/main/java/org/wikipedia/createaccount/CreateAccountTokenResult.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.wikipedia.createaccount;
-
-import android.os.*;
-import org.wikipedia.editing.*;
-
-public class CreateAccountTokenResult extends CreateAccountResult {
-    private final CaptchaResult captchaResult;
-    private final String token;
-
-    public CreateAccountTokenResult(CaptchaResult captchaResult, String token) 
{
-        super("needtoken");
-        this.captchaResult = captchaResult;
-        this.token = token;
-    }
-
-    public CaptchaResult getCaptchaResult() {
-        return captchaResult;
-    }
-
-    public String getToken() {
-        return token;
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int flags) {
-        super.writeToParcel(parcel, flags);
-        parcel.writeString(token);
-        parcel.writeParcelable(captchaResult, flags);
-    }
-
-    private CreateAccountTokenResult(Parcel in) {
-        super(in);
-        token = in.readString();
-        captchaResult = 
in.readParcelable(CaptchaResult.class.getClassLoader());
-    }
-
-    public static final Parcelable.Creator<CreateAccountTokenResult> CREATOR
-            = new Parcelable.Creator<CreateAccountTokenResult>() {
-        public CreateAccountTokenResult createFromParcel(Parcel in) {
-            return new CreateAccountTokenResult(in);
-        }
-
-        public CreateAccountTokenResult[] newArray(int size) {
-            return new CreateAccountTokenResult[size];
-        }
-    };
-
-}

-- 
To view, visit https://gerrit.wikimedia.org/r/125982
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8a9bbf3e63086fb016121552b57e1210ac6d821c
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to