[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Get user ID after logging in or creating an account
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 Callcall, +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
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 Callcall, 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