From cf7583abd4cb860ff42cbac4d9be0a98afb4d68b Mon Sep 17 00:00:00 2001 From: Piyush Goel <46752548+Arnold2381@users.noreply.github.com> Date: Mon, 3 May 2021 06:07:14 +0530 Subject: [PATCH] Login error message is displayed in native phone locale language and not in just English. Fixes #4290 (#4389) * Login error message is displayed in native phone locale language. * Login error message is displayed in native phone locale language. --- .../free/nrw/commons/auth/LoginActivity.java | 3 ++- .../org/wikipedia/dataclient/Service.java | 4 +-- .../java/org/wikipedia/login/LoginClient.java | 25 +++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 8b260baa6..680e15953 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -30,6 +30,7 @@ import androidx.core.content.ContextCompat; import com.google.android.material.textfield.TextInputLayout; import fr.free.nrw.commons.utils.ActivityUtils; +import java.util.Locale; import org.wikipedia.AppAdapter; import org.wikipedia.dataclient.ServiceFactory; import org.wikipedia.dataclient.WikiSite; @@ -265,7 +266,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { public void onResponse(Call call, Response response) { loginClient.login(commonsWikiSite, username, password, null, twoFactorCode, - response.body().query().loginToken(), new LoginCallback() { + response.body().query().loginToken(), Locale.getDefault().getLanguage(), new LoginCallback() { @Override public void success(@NonNull LoginResult result) { Timber.d("Login Success"); diff --git a/data-client/src/main/java/org/wikipedia/dataclient/Service.java b/data-client/src/main/java/org/wikipedia/dataclient/Service.java index f3763d886..878517634 100644 --- a/data-client/src/main/java/org/wikipedia/dataclient/Service.java +++ b/data-client/src/main/java/org/wikipedia/dataclient/Service.java @@ -229,14 +229,14 @@ public interface Service { @FormUrlEncoded @POST(MW_API_PREFIX + "action=clientlogin&rememberMe=") @NonNull Call postLogIn(@Field("username") String user, @Field("password") String pass, - @Field("logintoken") String token, @Field("loginreturnurl") String url); + @Field("logintoken") String token, @Field("uselang") String userLanguage, @Field("loginreturnurl") String url); @Headers("Cache-Control: no-cache") @FormUrlEncoded @POST(MW_API_PREFIX + "action=clientlogin&rememberMe=") @NonNull Call postLogIn(@Field("username") String user, @Field("password") String pass, @Field("retype") String retypedPass, @Field("OATHToken") String twoFactorCode, - @Field("logintoken") String token, + @Field("logintoken") String token, @Field("uselang") String userLanguage, @Field("logincontinue") boolean loginContinue); @Headers("Cache-Control: no-cache") diff --git a/data-client/src/main/java/org/wikipedia/login/LoginClient.java b/data-client/src/main/java/org/wikipedia/login/LoginClient.java index eaedd828d..08137dddd 100644 --- a/data-client/src/main/java/org/wikipedia/login/LoginClient.java +++ b/data-client/src/main/java/org/wikipedia/login/LoginClient.java @@ -33,7 +33,14 @@ import retrofit2.Response; public class LoginClient { @Nullable private Call tokenCall; @Nullable private Call loginCall; - + /** + * userLanguage + * It holds the value of the user's device language code. + * For example, if user's device language is English it will hold En + * The value will be fetched when the user clicks Login Button in the LoginActivity + */ + @NonNull private String userLanguage; + public interface LoginCallback { void success(@NonNull LoginResult result); void twoFactorPrompt(@NonNull Throwable caught, @Nullable String token); @@ -49,7 +56,8 @@ public class LoginClient { tokenCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { - login(wiki, userName, password, null, null, response.body().query().loginToken(), cb); + login(wiki, userName, password, null, null, response.body().query().loginToken(), + userLanguage, cb); } @Override @@ -64,10 +72,12 @@ public class LoginClient { public void login(@NonNull final WikiSite wiki, @NonNull final String userName, @NonNull final String password, @Nullable final String retypedPassword, @Nullable final String twoFactorCode, - @Nullable final String loginToken, @NonNull final LoginCallback cb) { + @Nullable final String loginToken, @NonNull final String userLanguage, @NonNull final LoginCallback cb) { + this.userLanguage = userLanguage; loginCall = TextUtils.isEmpty(twoFactorCode) && TextUtils.isEmpty(retypedPassword) - ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, Service.WIKIPEDIA_URL) - : ServiceFactory.get(wiki).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken, true); + ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL) + : ServiceFactory.get(wiki).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken, + userLanguage, true); loginCall.enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { @@ -114,8 +124,9 @@ public class LoginClient { String loginToken = tokenResponse.body().query().loginToken(); Call tempLoginCall = StringUtils.defaultIfEmpty(twoFactorCode, "").isEmpty() - ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, Service.WIKIPEDIA_URL) - : ServiceFactory.get(wiki).postLogIn(userName, password, null, twoFactorCode, loginToken, true); + ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL) + : ServiceFactory.get(wiki).postLogIn(userName, password, null, twoFactorCode, loginToken, + userLanguage, true); Response response = tempLoginCall.execute(); LoginResponse loginResponse = response.body(); if (loginResponse == null) {