From bae741875690400efac68ed49f2ead405ec2ed53 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 14 Mar 2014 20:43:54 +0100 Subject: [PATCH] fixed logic bug with cleaning of presences --- .../conversations/services/XmppConnectionService.java | 9 ++++++++- src/eu/siacs/conversations/xmpp/OnBindListener.java | 7 +++++++ src/eu/siacs/conversations/xmpp/XmppConnection.java | 10 +++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/eu/siacs/conversations/xmpp/OnBindListener.java diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 438150ac..c7f1bdb7 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -34,6 +34,7 @@ import eu.siacs.conversations.utils.OnPhoneContactsLoadedListener; import eu.siacs.conversations.utils.PhoneHelper; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xml.Element; +import eu.siacs.conversations.xmpp.OnBindListener; import eu.siacs.conversations.xmpp.OnIqPacketReceived; import eu.siacs.conversations.xmpp.OnMessagePacketReceived; import eu.siacs.conversations.xmpp.OnPresencePacketReceived; @@ -186,7 +187,6 @@ public class XmppConnectionService extends Service { accountChangedListener.onAccountListChangedListener(); } if (account.getStatus() == Account.STATUS_ONLINE) { - databaseBackend.clearPresences(account); if (account.getXmppConnection().hasFeatureRosterManagment()) { updateRoster(account, null); } @@ -541,6 +541,13 @@ public class XmppConnectionService extends Service { } } }); + connection.setOnBindListener(new OnBindListener() { + + @Override + public void onBind(Account account) { + databaseBackend.clearPresences(account); + } + }); return connection; } diff --git a/src/eu/siacs/conversations/xmpp/OnBindListener.java b/src/eu/siacs/conversations/xmpp/OnBindListener.java new file mode 100644 index 00000000..f09cf33d --- /dev/null +++ b/src/eu/siacs/conversations/xmpp/OnBindListener.java @@ -0,0 +1,7 @@ +package eu.siacs.conversations.xmpp; + +import eu.siacs.conversations.entities.Account; + +public interface OnBindListener { + public void onBind(Account account); +} diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java index 4d5d0ec2..1f0f23a2 100644 --- a/src/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java @@ -86,7 +86,8 @@ public class XmppConnection implements Runnable { private OnIqPacketReceived unregisteredIqListener = null; private OnMessagePacketReceived messageListener = null; private OnStatusChanged statusListener = null; - private OnTLSExceptionReceived tlsListener; + private OnTLSExceptionReceived tlsListener = null; + private OnBindListener bindListener = null; public XmppConnection(Account account, PowerManager pm) { this.account = account; @@ -540,6 +541,9 @@ public class XmppConnection implements Runnable { String resource = packet.findChild("bind").findChild("jid") .getContent().split("/")[1]; account.setResource(resource); + if (bindListener !=null) { + bindListener.onBind(account); + } account.setStatus(Account.STATUS_ONLINE); if (streamFeatures.hasChild("sm")) { EnablePacket enable = new EnablePacket(); @@ -693,6 +697,10 @@ public class XmppConnection implements Runnable { public void setOnTLSExceptionReceivedListener(OnTLSExceptionReceived listener) { this.tlsListener = listener; } + + public void setOnBindListener(OnBindListener listener) { + this.bindListener = listener; + } public void disconnect(boolean force) { changeStatus(Account.STATUS_OFFLINE);