From 9fa77720e18b493e2199ed0d0f74a15126bf719e Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sun, 31 Mar 2019 14:54:45 +0200 Subject: add ability to delete account also from server fixes #315 --- .../messenger/services/XmppConnectionService.java | 5 +++++ .../de/pixart/messenger/ui/ManageAccountActivity.java | 18 ++++++++++++++++-- .../java/de/pixart/messenger/xmpp/XmppConnection.java | 16 ++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index caea57fc8..90b2784a5 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -2354,6 +2354,11 @@ public class XmppConnectionService extends Service { }); } + public void deleteAccountFromServer(final Account account) { + account.getXmppConnection().sendDeleteRequest(); + deleteAccount(account); + } + public void deleteAccount(final Account account) { synchronized (this.conversations) { for (final Conversation conversation : conversations) { diff --git a/src/main/java/de/pixart/messenger/ui/ManageAccountActivity.java b/src/main/java/de/pixart/messenger/ui/ManageAccountActivity.java index fc5563df0..449e3871b 100644 --- a/src/main/java/de/pixart/messenger/ui/ManageAccountActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ManageAccountActivity.java @@ -355,7 +355,7 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.mgmt_account_are_you_sure)); builder.setIconAttribute(android.R.attr.alertDialogIcon); - builder.setMessage(getString(R.string.mgmt_account_delete_confirm_text)); + builder.setMessage(getString(R.string.mgmt_account_delete_confirm_message)); builder.setPositiveButton(getString(R.string.delete), (dialog, which) -> { xmppConnectionService.deleteAccount(account); @@ -364,7 +364,21 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda WelcomeActivity.launch(this); } }); - builder.setNegativeButton(getString(R.string.cancel), null); + + builder.setNegativeButton(getString(R.string.delete_from_server), + (dialog, which) -> { + if (account.isOnlineAndConnected()) { + xmppConnectionService.deleteAccountFromServer(account); + selectedAccount = null; + if (xmppConnectionService.getAccounts().size() == 0 && Config.MAGIC_CREATE_DOMAIN != null) { + WelcomeActivity.launch(this); + } + } else { + informUser(R.string.go_online_to_delete); + } + }); + + builder.setNeutralButton(getString(R.string.cancel), null); builder.create().show(); } diff --git a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java index dd82ab7bb..8910ee418 100644 --- a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java +++ b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java @@ -1017,6 +1017,22 @@ public class XmppConnection implements Runnable { }, true); } + public void sendDeleteRequest() { + final IqPacket delete = new IqPacket(IqPacket.TYPE.SET); + delete.query("jabber:iq:register").addChild("remove"); + delete.setTo(Jid.of(account.getServer())); + delete.setFrom(account.getJid().asBareJid()); + Log.d(Config.LOGTAG, "Delete " + delete); + sendUnmodifiedIqPacket(delete, (account, packet) -> { + if (packet.getType() == IqPacket.TYPE.TIMEOUT) { + return; + } + if (packet.getType() == IqPacket.TYPE.ERROR) { + throw new StateChangingError(Account.State.DISABLED); + } + }, true); + } + private void setAccountCreationFailed(String url) { if (url != null) { -- cgit v1.2.3