diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index 27bf0d75..ba07da4e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -32,8 +32,10 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.text.Editable; import android.text.Html; import android.text.TextUtils; +import android.text.TextWatcher; import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.LayoutInflater; @@ -106,7 +108,7 @@ public class FragmentAccount extends FragmentEx { private Group grpFolders; private long id = -1; - private boolean authorized = true; + private String authorized = null; @Override public void onCreate(Bundle savedInstanceState) { @@ -166,8 +168,8 @@ public class FragmentAccount extends FragmentEx { etName.setText(provider.name); btnAuthorize.setVisibility(provider.type == null ? View.GONE : View.VISIBLE); - if (authorized) { - authorized = false; + if (authorized != null) { + authorized = null; etUser.setText(null); tilPassword.getEditText().setText(null); } @@ -184,6 +186,22 @@ public class FragmentAccount extends FragmentEx { } }); + tilPassword.getEditText().addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (authorized != null && !authorized.equals(s.toString())) + authorized = null; + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + btnAuthorize.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -225,7 +243,7 @@ public class FragmentAccount extends FragmentEx { args.putString("port", etPort.getText().toString()); args.putString("user", etUser.getText().toString()); args.putString("password", tilPassword.getEditText().getText().toString()); - args.putInt("auth_type", authorized ? provider.getAuthType() : Helper.AUTH_TYPE_PASSWORD); + args.putInt("auth_type", authorized == null ? Helper.AUTH_TYPE_PASSWORD : provider.getAuthType()); args.putBoolean("synchronize", cbSynchronize.isChecked()); args.putBoolean("primary", cbPrimary.isChecked()); @@ -441,7 +459,7 @@ public class FragmentAccount extends FragmentEx { args.putString("port", etPort.getText().toString()); args.putString("user", etUser.getText().toString()); args.putString("password", tilPassword.getEditText().getText().toString()); - args.putInt("auth_type", authorized ? provider.getAuthType() : Helper.AUTH_TYPE_PASSWORD); + args.putInt("auth_type", authorized == null ? Helper.AUTH_TYPE_PASSWORD : provider.getAuthType()); args.putBoolean("synchronize", cbSynchronize.isChecked()); args.putBoolean("primary", cbPrimary.isChecked()); args.putString("poll_interval", etInterval.getText().toString()); @@ -669,7 +687,7 @@ public class FragmentAccount extends FragmentEx { public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("provider", spProvider.getSelectedItemPosition()); - outState.putBoolean("authorized", authorized); + outState.putString("authorized", authorized); outState.putString("password", tilPassword.getEditText().getText().toString()); } @@ -712,6 +730,7 @@ public class FragmentAccount extends FragmentEx { etHost.setText(account == null ? null : account.host); etPort.setText(account == null ? null : Long.toString(account.port)); + authorized = (account != null && account.auth_type != Helper.AUTH_TYPE_PASSWORD ? account.password : null); etUser.setText(account == null ? null : account.user); tilPassword.getEditText().setText(account == null ? null : account.password); @@ -723,7 +742,7 @@ public class FragmentAccount extends FragmentEx { spProvider.setTag(provider); spProvider.setSelection(provider); - authorized = savedInstanceState.getBoolean("authorized"); + authorized = savedInstanceState.getString("authorized"); tilPassword.getEditText().setText(savedInstanceState.getString("password")); } @@ -748,7 +767,7 @@ public class FragmentAccount extends FragmentEx { }); } - void selectAccount() { + private void selectAccount() { Log.i(Helper.TAG, "Select account"); Provider provider = (Provider) spProvider.getSelectedItem(); if (provider.type != null) @@ -795,7 +814,7 @@ public class FragmentAccount extends FragmentEx { String token = bundle.getString(AccountManager.KEY_AUTHTOKEN); Log.i(Helper.TAG, "Got token"); - authorized = true; + authorized = token; etUser.setText(account.name); tilPassword.getEditText().setText(token); } catch (Throwable ex) {