[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Get user ID after logging in or creating an account

2017-02-02 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/334371 )

Change subject: Get user ID after logging in or creating an account
..


Get user ID after logging in or creating an account

The MW API doesn't return user id on login or account creation success.
We have to get it separately.  Currently, we don't do this, and the user id
in the app is always 0.

It seems the numeric user ID is needed for EventLogging, so we'd better
get it.

For the login case, this adds another paramter to the request that's
already made after login to retrieve group memberships, so that the user
ID is also returned.

For account creation, a simple new UserIdClient is added to make the
follow-up request.

Bug: T149915
Change-Id: I3dc7871805edf51d2de6598dd5a5e67140f416b5
---
M app/src/main/java/org/wikipedia/WikipediaApp.java
M app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
M app/src/main/java/org/wikipedia/createaccount/CreateAccountClient.java
M app/src/main/java/org/wikipedia/createaccount/CreateAccountSuccessResult.java
D app/src/main/java/org/wikipedia/login/GroupMembershipClient.java
M app/src/main/java/org/wikipedia/login/LoginActivity.java
M app/src/main/java/org/wikipedia/login/LoginClient.java
M app/src/main/java/org/wikipedia/login/User.java
A app/src/main/java/org/wikipedia/login/UserExtendedInfoClient.java
A app/src/main/java/org/wikipedia/login/UserIdClient.java
M app/src/main/java/org/wikipedia/login/UserInfoStorage.java
M app/src/main/java/org/wikipedia/settings/Prefs.java
M 
app/src/main/java/org/wikipedia/useroption/dataclient/DefaultUserOptionDataClient.java
M app/src/main/java/org/wikipedia/useroption/dataclient/UserInfo.java
M app/src/main/res/values/preference_keys.xml
A app/src/test/java/org/wikipedia/login/UserIdClientTest.java
M app/src/test/java/org/wikipedia/login/UserTest.java
A app/src/test/res/raw/user_info.json
18 files changed, 425 insertions(+), 184 deletions(-)

Approvals:
  Dbrant: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java 
b/app/src/main/java/org/wikipedia/WikipediaApp.java
index f2c5e81..698801f 100644
--- a/app/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/app/src/main/java/org/wikipedia/WikipediaApp.java
@@ -35,6 +35,7 @@
 import org.wikipedia.dataclient.OkHttpConnectionFactory;
 import org.wikipedia.dataclient.SharedPreferenceCookieManager;
 import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.dataclient.mwapi.MwQueryResponse;
 import org.wikipedia.edit.summaries.EditSummary;
 import org.wikipedia.events.ChangeTextSizeEvent;
 import org.wikipedia.events.ThemeChangeEvent;
@@ -43,6 +44,7 @@
 import org.wikipedia.language.AppLanguageLookUpTable;
 import org.wikipedia.language.AppLanguageState;
 import org.wikipedia.login.User;
+import org.wikipedia.login.UserIdClient;
 import org.wikipedia.notifications.NotificationPollBroadcastReceiver;
 import org.wikipedia.onboarding.OnboardingStateMachine;
 import org.wikipedia.onboarding.PrefsOnboardingStateMachine;
@@ -73,6 +75,8 @@
 import java.util.Random;
 import java.util.UUID;
 
+import retrofit2.Call;
+
 import static org.apache.commons.lang3.StringUtils.defaultString;
 import static org.wikipedia.util.DimenUtil.getFontSizeFromSp;
 import static org.wikipedia.util.ReleaseUtil.getChannel;
@@ -97,6 +101,7 @@
 private CsrfTokenStorage csrfTokenStorage;
 private String userAgent;
 private WikiSite wiki;
+@NonNull private UserIdClient idClient = new UserIdClient();
 
 private CrashReporter crashReporter;
 private RefWatcher refWatcher;
@@ -260,7 +265,11 @@
 
 @NonNull
 public String getAppOrSystemLanguageCode() {
-return appLanguageState.getAppOrSystemLanguageCode();
+String code = appLanguageState.getAppOrSystemLanguageCode();
+if (User.isLoggedIn() && !User.getUser().getUserIDLang().equals(code)) 
{
+updateUserIdForLanguage(code);
+}
+return code;
 }
 
 @NonNull
@@ -273,6 +282,28 @@
 resetWikiSite();
 }
 
+private void updateUserIdForLanguage(@NonNull final String code) {
+final WikiSite wikiSite = WikiSite.forLanguageCode(code);
+idClient.request(wikiSite, new UserIdClient.Callback() {
+@Override
+public void success(@NonNull 
Call call,
+int userId) {
+User user = User.getUser();
+if (user != null) {
+user.setUserID(userId);
+user.setUserIDLang(code);
+L.v("Found user ID " + userId + " for " + code);
+}
+}
+
+@Override
+public void failure(@NonNull 
Call call,
+@NonNull Throwable caught) {
+L.e("Failed to get user ID for " + 

[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Get user ID after logging in or creating an account

2017-01-26 Thread Mholloway (Code Review)
Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/334371 )

Change subject: Get user ID after logging in or creating an account
..

Get user ID after logging in or creating an account

The MW API doesn't return user id on login or account creation success.
We have to get it separately.  Currently, we don't do this, and the user id
in the app is always 0.

It seems the numeric user ID is needed for EventLogging, so we'd better
get it.

For the login case, this adds another paramter to the request that's
already made after login to retrieve group memberships, so that the user
ID is also returned.

For account creation, a simple new UserIdClient is added to make the
follow-up request.

TODO: Update the user ID with the new UserIdClient when the app language
state changes, since a user's numeric ID varies by wiki.  This will come
in the next patch in this series.

Bug: T149915
Change-Id: I3dc7871805edf51d2de6598dd5a5e67140f416b5
---
M app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
M app/src/main/java/org/wikipedia/createaccount/CreateAccountClient.java
M app/src/main/java/org/wikipedia/createaccount/CreateAccountSuccessResult.java
D app/src/main/java/org/wikipedia/login/GroupMembershipClient.java
M app/src/main/java/org/wikipedia/login/LoginClient.java
M app/src/main/java/org/wikipedia/login/User.java
A app/src/main/java/org/wikipedia/login/UserExtendedInfoClient.java
A app/src/main/java/org/wikipedia/login/UserIdClient.java
M 
app/src/main/java/org/wikipedia/useroption/dataclient/DefaultUserOptionDataClient.java
M app/src/main/java/org/wikipedia/useroption/dataclient/UserInfo.java
A app/src/test/java/org/wikipedia/login/UserIdClientTest.java
A app/src/test/res/raw/user_info.json
12 files changed, 373 insertions(+), 178 deletions(-)


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

diff --git 
a/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java 
b/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
index f101268..a63c8d7 100644
--- a/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
+++ b/app/src/main/java/org/wikipedia/createaccount/CreateAccountActivity.java
@@ -27,6 +27,8 @@
 import org.wikipedia.captcha.CaptchaResult;
 import org.wikipedia.dataclient.WikiSite;
 import org.wikipedia.dataclient.mwapi.MwQueryResponse;
+import org.wikipedia.login.UserIdClient;
+import org.wikipedia.useroption.dataclient.UserInfo;
 import org.wikipedia.util.FeedbackUtil;
 import org.wikipedia.util.log.L;
 import org.wikipedia.views.NonEmptyValidator;
@@ -262,21 +264,24 @@
 captchaHandler.isActive() ? captchaHandler.captchaWord() : 
"null",
 new CreateAccountClient.Callback() {
 @Override
-public void success(@NonNull Call 
call, @NonNull CreateAccountSuccessResult result) {
+public void success(@NonNull Call 
call,
+@NonNull final 
CreateAccountSuccessResult result) {
 if (!progressDialog.isShowing()) {
 // no longer attached to activity!
 return;
 }
-createAccountResult = result;
-progressDialog.dismiss();
-captchaHandler.cancelCaptcha();
-funnel.logSuccess();
-hideSoftKeyboard(CreateAccountActivity.this);
-Intent resultIntent = new Intent();
-resultIntent.putExtra("username", 
result.getUsername());
-resultIntent.putExtra("password", 
passwordEdit.getText().toString());
-setResult(RESULT_ACCOUNT_CREATED, resultIntent);
-finish();
+getUserId(new UserIdCallback() {
+@Override
+public void success(@NonNull 
Call call, int userId) {
+finishWithUserResult(result, userId);
+}
+
+@Override
+public void failure(@NonNull 
Call call, @NonNull Throwable caught) {
+finishWithUserResult(result, 0);
+L.e("Failed to obtain new user ID", caught);
+}
+});
 }
 
 @Override
@@ -311,4 +316,41 @@
 }
 super.onStop();
 }
+
+// Get the new user ID, which the createaccount API doesn't provide to us 
on success :(
+// TODO: See about getting this into the API success response so we dont' 
have to make another call.
+private void