ChangePasswordActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.content.Intent;
  4import android.os.Bundle;
  5import android.view.View;
  6import android.widget.Toast;
  7
  8import androidx.databinding.DataBindingUtil;
  9
 10import com.google.android.material.textfield.TextInputLayout;
 11
 12import eu.siacs.conversations.R;
 13import eu.siacs.conversations.databinding.ActivityChangePasswordBinding;
 14import eu.siacs.conversations.entities.Account;
 15import eu.siacs.conversations.services.XmppConnectionService;
 16import eu.siacs.conversations.ui.widget.DisabledActionModeCallback;
 17
 18public class ChangePasswordActivity extends XmppActivity implements XmppConnectionService.OnAccountPasswordChanged {
 19
 20	private ActivityChangePasswordBinding binding;
 21
 22	private final View.OnClickListener mOnChangePasswordButtonClicked = new View.OnClickListener() {
 23		@Override
 24		public void onClick(final View view) {
 25			final var account = mAccount;
 26			if (account == null) {
 27				return;
 28			}
 29				final String currentPassword = binding.currentPassword.getText().toString();
 30				final String newPassword = binding.newPassword.getText().toString();
 31				if (!account.isOptionSet(Account.OPTION_MAGIC_CREATE) && !currentPassword.equals(account.getPassword())) {
 32					binding.currentPassword.requestFocus();
 33					binding.currentPasswordLayout.setError(getString(R.string.account_status_unauthorized));
 34					removeErrorsOnAllBut(binding.currentPasswordLayout);
 35				} else if (newPassword.trim().isEmpty()) {
 36					binding.newPassword.requestFocus();
 37					binding.newPasswordLayout.setError(getString(R.string.password_should_not_be_empty));
 38					removeErrorsOnAllBut(binding.newPasswordLayout);
 39				} else {
 40					binding.currentPasswordLayout.setError(null);
 41					binding.newPasswordLayout.setError(null);
 42					xmppConnectionService.updateAccountPasswordOnServer(account, newPassword, ChangePasswordActivity.this);
 43					binding.changePasswordButton.setEnabled(false);
 44					binding.changePasswordButton.setText(R.string.updating);
 45				}
 46		}
 47	};
 48
 49
 50
 51	private Account mAccount;
 52
 53	@Override
 54    protected void onBackendConnected() {
 55		this.mAccount = extractAccount(getIntent());
 56		if (this.mAccount != null && this.mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE)) {
 57			this.binding.currentPasswordLayout.setVisibility(View.GONE);
 58		} else {
 59			this.binding.currentPasswordLayout.setVisibility(View.VISIBLE);
 60		}
 61	}
 62
 63	@Override
 64	protected void onCreate(final Bundle savedInstanceState) {
 65		super.onCreate(savedInstanceState);
 66		this.binding = DataBindingUtil.setContentView(this, R.layout.activity_change_password);
 67		Activities.setStatusAndNavigationBarColors(this, binding.getRoot());
 68		setSupportActionBar(binding.toolbar);
 69		configureActionBar(getSupportActionBar());
 70		binding.cancelButton.setOnClickListener(view -> finish());
 71		binding.changePasswordButton.setOnClickListener(this.mOnChangePasswordButtonClicked);
 72		binding.currentPassword.setCustomSelectionActionModeCallback(new DisabledActionModeCallback());
 73		binding.newPassword.setCustomSelectionActionModeCallback(new DisabledActionModeCallback());
 74	}
 75
 76	@Override
 77	public void onStart() {
 78		super.onStart();
 79		Intent intent = getIntent();
 80		String password = intent != null ? intent.getStringExtra("password") : null;
 81		if (password != null) {
 82			binding.newPassword.getEditableText().clear();
 83			binding.newPassword.getEditableText().append(password);
 84		}
 85	}
 86
 87	@Override
 88	public void onPasswordChangeSucceeded() {
 89		runOnUiThread(() -> {
 90			Toast.makeText(ChangePasswordActivity.this,R.string.password_changed,Toast.LENGTH_LONG).show();
 91			finish();
 92		});
 93	}
 94
 95	@Override
 96	public void onPasswordChangeFailed() {
 97		runOnUiThread(() -> {
 98			binding.newPasswordLayout.setError(getString(R.string.could_not_change_password));
 99			binding.changePasswordButton.setEnabled(true);
100			binding.changePasswordButton.setText(R.string.change_password);
101		});
102
103	}
104
105	private void removeErrorsOnAllBut(TextInputLayout exception) {
106		if (this.binding.currentPasswordLayout != exception) {
107			this.binding.currentPasswordLayout.setErrorEnabled(false);
108			this.binding.currentPasswordLayout.setError(null);
109		}
110		if (this.binding.newPasswordLayout != exception) {
111			this.binding.newPasswordLayout.setErrorEnabled(false);
112			this.binding.newPasswordLayout.setError(null);
113		}
114
115	}
116
117	public void refreshUiReal() {
118
119	}
120}