added callback to change account password to notify UI on success / failure

This commit is contained in:
Daniel Gultsch 2014-12-25 22:08:13 +01:00
parent e4d9dca2fe
commit 0c22a8d1c6
4 changed files with 66 additions and 27 deletions

View file

@ -144,7 +144,7 @@ public class IqGenerator extends AbstractGenerator {
packet.setTo(account.getServer()); packet.setTo(account.getServer());
final Element query = packet.addChild("query", Xmlns.REGISTER); final Element query = packet.addChild("query", Xmlns.REGISTER);
final Jid jid = account.getJid(); final Jid jid = account.getJid();
query.addChild("username").setContent(jid.isDomainJid() ? jid.toString() : jid.getLocalpart()); query.addChild("username").setContent(jid.getLocalpart());
query.addChild("password").setContent(newPassword); query.addChild("password").setContent(newPassword);
return packet; return packet;
} }

View file

@ -1100,19 +1100,25 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
getNotificationService().updateErrorNotification(); getNotificationService().updateErrorNotification();
} }
public void updateAccountPasswordOnServer(final Account account, final String newPassword) { public void updateAccountPasswordOnServer(final Account account, final String newPassword, final OnAccountPasswordChanged callback) {
if (account.isOnlineAndConnected()) { final IqPacket iq = getIqGenerator().generateSetPassword(account, newPassword);
final IqPacket iq = getIqGenerator().generateSetPassword(account, newPassword); sendIqPacket(account, iq, new OnIqPacketReceived() {
sendIqPacket(account, iq, new OnIqPacketReceived() { @Override
@Override public void onIqPacketReceived(final Account account, final IqPacket packet) {
public void onIqPacketReceived(final Account account, final IqPacket packet) { if (packet.getType() == IqPacket.TYPE_RESULT) {
if (packet.getType() == IqPacket.TYPE_RESULT) { account.setPassword(newPassword);
account.setPassword(newPassword); databaseBackend.updateAccount(account);
updateAccount(account); callback.onPasswordChangeSucceeded();
} } else {
callback.onPasswordChangeFailed();
} }
}); }
} });
}
public interface OnAccountPasswordChanged {
public void onPasswordChangeSucceeded();
public void onPasswordChangeFailed();
} }
public void deleteAccount(final Account account) { public void deleteAccount(final Account account) {

View file

@ -25,6 +25,7 @@ import android.widget.Toast;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate; import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate;
import eu.siacs.conversations.ui.adapter.KnownHostsAdapter; import eu.siacs.conversations.ui.adapter.KnownHostsAdapter;
import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.CryptoHelper;
@ -34,7 +35,7 @@ import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.jid.Jid;
import eu.siacs.conversations.xmpp.pep.Avatar; import eu.siacs.conversations.xmpp.pep.Avatar;
public class EditAccountActivity extends XmppActivity implements OnAccountUpdate { public class EditAccountActivity extends XmppActivity implements OnAccountUpdate, XmppConnectionService.OnAccountPasswordChanged {
private AutoCompleteTextView mAccountJid; private AutoCompleteTextView mAccountJid;
private EditText mPassword; private EditText mPassword;
@ -63,17 +64,17 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
private Account mAccount; private Account mAccount;
private boolean mFetchingAvatar = false; private boolean mFetchingAvatar = false;
private boolean mChangingPassword = false;
private final OnClickListener mSaveButtonClickListener = new OnClickListener() { private final OnClickListener mSaveButtonClickListener = new OnClickListener() {
@Override @Override
public void onClick(final View v) { public void onClick(final View v) {
if (mAccount != null if (mAccount != null && mAccount.getStatus() == Account.State.DISABLED) {
&& mAccount.getStatus() == Account.State.DISABLED) {
mAccount.setOption(Account.OPTION_DISABLED, false); mAccount.setOption(Account.OPTION_DISABLED, false);
xmppConnectionService.updateAccount(mAccount); xmppConnectionService.updateAccount(mAccount);
return; return;
} }
final boolean registerNewAccount = mRegisterNew.isChecked(); final boolean registerNewAccount = mRegisterNew.isChecked();
final boolean changePassword = mChangePassword.isChecked(); final boolean changePassword = mChangePassword.isChecked();
final Jid jid; final Jid jid;
@ -107,10 +108,13 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
} }
if (changePassword) { if (changePassword) {
if (mAccount.isOnlineAndConnected()) { if (mAccount.isOnlineAndConnected()) {
xmppConnectionService.updateAccountPasswordOnServer(mAccount, mPassword.getText().toString()); xmppConnectionService.updateAccountPasswordOnServer(mAccount, mPassword.getText().toString(),EditAccountActivity.this);
mChangingPassword = true;
updateSaveButton();
} else { } else {
mPassword.setError(getResources().getString(R.string.account_status_no_internet)); Toast.makeText(EditAccountActivity.this,R.string.not_connected_try_again,Toast.LENGTH_SHORT).show();
} }
return;
} else { } else {
mAccount.setPassword(password); mAccount.setPassword(password);
mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount); mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
@ -119,8 +123,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
} else { } else {
try { try {
if (xmppConnectionService.findAccountByJid(Jid.fromString(mAccountJid.getText().toString())) != null) { if (xmppConnectionService.findAccountByJid(Jid.fromString(mAccountJid.getText().toString())) != null) {
mAccountJid mAccountJid.setError(getString(R.string.account_already_exists));
.setError(getString(R.string.account_already_exists));
mAccountJid.requestFocus(); mAccountJid.requestFocus();
return; return;
} }
@ -253,13 +256,15 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
} }
protected void updateSaveButton() { protected void updateSaveButton() {
if (mAccount != null if (mChangingPassword) {
&& mAccount.getStatus() == Account.State.CONNECTING) { this.mSaveButton.setEnabled(false);
this.mSaveButton.setTextColor(getSecondaryTextColor());
this.mSaveButton.setText(R.string.updating);
} else if (mAccount != null && mAccount.getStatus() == Account.State.CONNECTING) {
this.mSaveButton.setEnabled(false); this.mSaveButton.setEnabled(false);
this.mSaveButton.setTextColor(getSecondaryTextColor()); this.mSaveButton.setTextColor(getSecondaryTextColor());
this.mSaveButton.setText(R.string.account_status_connecting); this.mSaveButton.setText(R.string.account_status_connecting);
} else if (mAccount != null } else if (mAccount != null && mAccount.getStatus() == Account.State.DISABLED) {
&& mAccount.getStatus() == Account.State.DISABLED) {
this.mSaveButton.setEnabled(true); this.mSaveButton.setEnabled(true);
this.mSaveButton.setTextColor(getPrimaryTextColor()); this.mSaveButton.setTextColor(getPrimaryTextColor());
this.mSaveButton.setText(R.string.enable); this.mSaveButton.setText(R.string.enable);
@ -446,8 +451,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
if (this.mAccount.getStatus() == Account.State.ONLINE if (this.mAccount.getStatus() == Account.State.ONLINE
&& !this.mFetchingAvatar) { && !this.mFetchingAvatar) {
this.mStats.setVisibility(View.VISIBLE); this.mStats.setVisibility(View.VISIBLE);
this.mSessionEst.setText(UIHelper.readableTimeDifference( this.mSessionEst.setText(UIHelper.readableTimeDifferenceFull(this, this.mAccount.getXmppConnection()
getApplicationContext(), this.mAccount.getXmppConnection()
.getLastSessionEstablished())); .getLastSessionEstablished()));
Features features = this.mAccount.getXmppConnection().getFeatures(); Features features = this.mAccount.getXmppConnection().getFeatures();
if (features.rosterVersioning()) { if (features.rosterVersioning()) {
@ -517,4 +521,30 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
this.mStats.setVisibility(View.GONE); this.mStats.setVisibility(View.GONE);
} }
} }
@Override
public void onPasswordChangeSucceeded() {
this.mChangingPassword = false;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(EditAccountActivity.this,R.string.password_changed,Toast.LENGTH_SHORT).show();
updateSaveButton();
updateAccountInformation();
}
});
}
@Override
public void onPasswordChangeFailed() {
this.mChangingPassword = false;
runOnUiThread(new Runnable() {
@Override
public void run() {
mPassword.requestFocus();
mPassword.setError(getString(R.string.could_not_change_password));
updateSaveButton();
}
});
}
} }

View file

@ -389,4 +389,7 @@
<string name="copy_otr_clipboard_description">Copy OTR fingerprint to clipboard</string> <string name="copy_otr_clipboard_description">Copy OTR fingerprint to clipboard</string>
<string name="fetching_history_from_server">Fetching history from server</string> <string name="fetching_history_from_server">Fetching history from server</string>
<string name="no_more_history_on_server">No more history on server</string> <string name="no_more_history_on_server">No more history on server</string>
<string name="updating">Updating…</string>
<string name="password_changed">Password changed!</string>
<string name="could_not_change_password">Could not change password</string>
</resources> </resources>