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.
This commit is contained in:
Piyush Goel 2021-05-03 06:07:14 +05:30 committed by GitHub
parent f35d6d605b
commit cf7583abd4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 10 deletions

View file

@ -229,14 +229,14 @@ public interface Service {
@FormUrlEncoded
@POST(MW_API_PREFIX + "action=clientlogin&rememberMe=")
@NonNull Call<LoginClient.LoginResponse> 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<LoginClient.LoginResponse> 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")

View file

@ -33,7 +33,14 @@ import retrofit2.Response;
public class LoginClient {
@Nullable private Call<MwQueryResponse> tokenCall;
@Nullable private Call<LoginResponse> 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<MwQueryResponse>() {
@Override public void onResponse(@NonNull Call<MwQueryResponse> call,
@NonNull Response<MwQueryResponse> 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<LoginResponse>() {
@Override
public void onResponse(@NonNull Call<LoginResponse> call, @NonNull Response<LoginResponse> response) {
@ -114,8 +124,9 @@ public class LoginClient {
String loginToken = tokenResponse.body().query().loginToken();
Call<LoginResponse> 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<LoginResponse> response = tempLoginCall.execute();
LoginResponse loginResponse = response.body();
if (loginResponse == null) {