Better messaging for the user.

This commit is contained in:
Paul Hawke 2017-10-07 11:10:43 -05:00
parent f55c27a625
commit 3d0d48745e
5 changed files with 93 additions and 20 deletions

View file

@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v4.app.NavUtils;
import android.support.v7.app.AppCompatDelegate;
import android.text.Editable;
@ -17,7 +18,6 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.CommonsApplication;
@ -46,6 +46,8 @@ public class LoginActivity extends AccountAuthenticatorActivity {
ProgressDialog progressDialog;
private LoginTextWatcher textWatcher = new LoginTextWatcher();
private CommonsApplication app;
private ViewGroup errorMessageContainer;
private TextView errorMessage;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -63,6 +65,8 @@ public class LoginActivity extends AccountAuthenticatorActivity {
usernameEdit = findViewById(R.id.loginUsername);
passwordEdit = findViewById(R.id.loginPassword);
twoFactorEdit = findViewById(R.id.loginTwoFactor);
errorMessageContainer = findViewById(R.id.error_message_container);
errorMessage = findViewById(R.id.error_message);
prefs = getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE);
@ -216,24 +220,24 @@ public class LoginActivity extends AccountAuthenticatorActivity {
public void askUserForTwoFactorAuth() {
if (BuildConfig.DEBUG) {
twoFactorEdit.setVisibility(View.VISIBLE);
showUserToastAndCancelDialog(R.string.login_failed_2fa_needed);
showMessageAndCancelDialog(R.string.login_failed_2fa_needed);
} else {
showUserToastAndCancelDialog(R.string.login_failed_2fa_not_supported);
showMessageAndCancelDialog(R.string.login_failed_2fa_not_supported);
}
}
public void showUserToastAndCancelDialog(int resId) {
showUserToast(resId);
public void showMessageAndCancelDialog(@StringRes int resId) {
showMessage(resId);
progressDialog.cancel();
}
private void showUserToast(int resId) {
Toast.makeText(this, resId, Toast.LENGTH_LONG).show();
private void showMessage(@StringRes int resId) {
errorMessage.setText(getString(resId));
errorMessageContainer.setVisibility(View.VISIBLE);
}
public void showSuccessToastAndDismissDialog() {
Toast successToast = Toast.makeText(this, R.string.login_success, Toast.LENGTH_SHORT);
successToast.show();
public void showSuccessAndDismissDialog() {
showMessage(R.string.login_success);
progressDialog.dismiss();
}

View file

@ -72,7 +72,7 @@ class LoginTask extends AsyncTask<String, String, String> {
}
private void handlePassResult() {
loginActivity.showSuccessToastAndDismissDialog();
loginActivity.showSuccessAndDismissDialog();
AccountAuthenticatorResponse response = null;
@ -99,27 +99,27 @@ class LoginTask extends AsyncTask<String, String, String> {
private void handleOtherResults(String result) {
if (result.equals("NetworkFailure")) {
// Matches NetworkFailure which is created by the doInBackground method
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_network);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_network);
} else if (result.toLowerCase().contains("nosuchuser".toLowerCase()) || result.toLowerCase().contains("noname".toLowerCase())) {
// Matches nosuchuser, nosuchusershort, noname
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_username);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_username);
loginActivity.emptySensitiveEditFields();
} else if (result.toLowerCase().contains("wrongpassword".toLowerCase())) {
// Matches wrongpassword, wrongpasswordempty
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_password);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_password);
loginActivity.emptySensitiveEditFields();
} else if (result.toLowerCase().contains("throttle".toLowerCase())) {
// Matches unknown throttle error codes
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_throttled);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_throttled);
} else if (result.toLowerCase().contains("userblocked".toLowerCase())) {
// Matches login-userblocked
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_blocked);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_blocked);
} else if (result.equals("2FA")) {
loginActivity.askUserForTwoFactorAuth();
} else {
// Occurs with unhandled login failure codes
Timber.d("Login failed with reason: %s", result);
loginActivity.showUserToastAndCancelDialog(R.string.login_failed_generic);
loginActivity.showMessageAndCancelDialog(R.string.login_failed_generic);
}
}
}

View file

@ -40,11 +40,34 @@
android:textColor="@android:color/white"
android:textSize="24sp" />
<FrameLayout
android:id="@+id/error_message_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:background="@color/primaryLightColor"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:textColor="@color/primaryDarkColor"
tools:text="Check your password, something doesnt look right" />
</FrameLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/username_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:layout_below="@id/error_message_container"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"

View file

@ -40,11 +40,34 @@
android:textColor="@android:color/white"
android:textSize="24sp" />
<FrameLayout
android:id="@+id/error_message_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:background="@color/primaryLightColor"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:textColor="@color/primaryDarkColor"
tools:text="Check your password, something doesnt look right" />
</FrameLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/username_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:layout_below="@id/error_message_container"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"

View file

@ -40,11 +40,34 @@
android:textColor="@android:color/white"
android:textSize="24sp" />
<FrameLayout
android:id="@+id/error_message_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:background="@color/primaryLightColor"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:textColor="@color/primaryDarkColor"
tools:text="Check your password, something doesnt look right" />
</FrameLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/username_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/title"
android:layout_below="@id/error_message_container"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"