fixed logic bug with cleaning of presences

Daniel Gultsch created

Change summary

src/eu/siacs/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(-)

Detailed changes

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;
 	}
 

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);