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

@ -30,6 +30,7 @@ import androidx.core.content.ContextCompat;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import fr.free.nrw.commons.utils.ActivityUtils; import fr.free.nrw.commons.utils.ActivityUtils;
import java.util.Locale;
import org.wikipedia.AppAdapter; import org.wikipedia.AppAdapter;
import org.wikipedia.dataclient.ServiceFactory; import org.wikipedia.dataclient.ServiceFactory;
import org.wikipedia.dataclient.WikiSite; import org.wikipedia.dataclient.WikiSite;
@ -265,7 +266,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
public void onResponse(Call<MwQueryResponse> call, public void onResponse(Call<MwQueryResponse> call,
Response<MwQueryResponse> response) { Response<MwQueryResponse> response) {
loginClient.login(commonsWikiSite, username, password, null, twoFactorCode, loginClient.login(commonsWikiSite, username, password, null, twoFactorCode,
response.body().query().loginToken(), new LoginCallback() { response.body().query().loginToken(), Locale.getDefault().getLanguage(), new LoginCallback() {
@Override @Override
public void success(@NonNull LoginResult result) { public void success(@NonNull LoginResult result) {
Timber.d("Login Success"); Timber.d("Login Success");

View file

@ -229,14 +229,14 @@ public interface Service {
@FormUrlEncoded @FormUrlEncoded
@POST(MW_API_PREFIX + "action=clientlogin&rememberMe=") @POST(MW_API_PREFIX + "action=clientlogin&rememberMe=")
@NonNull Call<LoginClient.LoginResponse> postLogIn(@Field("username") String user, @Field("password") String pass, @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") @Headers("Cache-Control: no-cache")
@FormUrlEncoded @FormUrlEncoded
@POST(MW_API_PREFIX + "action=clientlogin&rememberMe=") @POST(MW_API_PREFIX + "action=clientlogin&rememberMe=")
@NonNull Call<LoginClient.LoginResponse> postLogIn(@Field("username") String user, @Field("password") String pass, @NonNull Call<LoginClient.LoginResponse> postLogIn(@Field("username") String user, @Field("password") String pass,
@Field("retype") String retypedPass, @Field("OATHToken") String twoFactorCode, @Field("retype") String retypedPass, @Field("OATHToken") String twoFactorCode,
@Field("logintoken") String token, @Field("logintoken") String token, @Field("uselang") String userLanguage,
@Field("logincontinue") boolean loginContinue); @Field("logincontinue") boolean loginContinue);
@Headers("Cache-Control: no-cache") @Headers("Cache-Control: no-cache")

View file

@ -33,6 +33,13 @@ import retrofit2.Response;
public class LoginClient { public class LoginClient {
@Nullable private Call<MwQueryResponse> tokenCall; @Nullable private Call<MwQueryResponse> tokenCall;
@Nullable private Call<LoginResponse> loginCall; @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 { public interface LoginCallback {
void success(@NonNull LoginResult result); void success(@NonNull LoginResult result);
@ -49,7 +56,8 @@ public class LoginClient {
tokenCall.enqueue(new Callback<MwQueryResponse>() { tokenCall.enqueue(new Callback<MwQueryResponse>() {
@Override public void onResponse(@NonNull Call<MwQueryResponse> call, @Override public void onResponse(@NonNull Call<MwQueryResponse> call,
@NonNull Response<MwQueryResponse> response) { @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 @Override
@ -64,10 +72,12 @@ public class LoginClient {
public void login(@NonNull final WikiSite wiki, @NonNull final String userName, @NonNull final String password, 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 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) loginCall = TextUtils.isEmpty(twoFactorCode) && TextUtils.isEmpty(retypedPassword)
? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, Service.WIKIPEDIA_URL) ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
: ServiceFactory.get(wiki).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken, true); : ServiceFactory.get(wiki).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken,
userLanguage, true);
loginCall.enqueue(new Callback<LoginResponse>() { loginCall.enqueue(new Callback<LoginResponse>() {
@Override @Override
public void onResponse(@NonNull Call<LoginResponse> call, @NonNull Response<LoginResponse> response) { public void onResponse(@NonNull Call<LoginResponse> call, @NonNull Response<LoginResponse> response) {
@ -114,8 +124,9 @@ public class LoginClient {
String loginToken = tokenResponse.body().query().loginToken(); String loginToken = tokenResponse.body().query().loginToken();
Call<LoginResponse> tempLoginCall = StringUtils.defaultIfEmpty(twoFactorCode, "").isEmpty() Call<LoginResponse> tempLoginCall = StringUtils.defaultIfEmpty(twoFactorCode, "").isEmpty()
? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, Service.WIKIPEDIA_URL) ? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
: ServiceFactory.get(wiki).postLogIn(userName, password, null, twoFactorCode, loginToken, true); : ServiceFactory.get(wiki).postLogIn(userName, password, null, twoFactorCode, loginToken,
userLanguage, true);
Response<LoginResponse> response = tempLoginCall.execute(); Response<LoginResponse> response = tempLoginCall.execute();
LoginResponse loginResponse = response.body(); LoginResponse loginResponse = response.body();
if (loginResponse == null) { if (loginResponse == null) {