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