diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index e9f93a63c..07f5a4279 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -287,7 +287,11 @@ public class XmppConnectionService extends Service { } else { Contact contact = findContact(account, fromParts[0]); if (contact == null) { - Log.d(LOGTAG,packet.getFrom()+ " could not be found"); + if ("subscribe".equals(type)) { + account.getXmppConnection().addPendingSubscription(fromParts[0]); + } else { + Log.d(LOGTAG,packet.getFrom()+ " could not be found"); + } return; } if (type == null) { @@ -343,7 +347,7 @@ public class XmppConnectionService extends Service { requestPresenceUpdatesFrom(contact); } } else { - // TODO: ask user to handle it maybe + account.getXmppConnection().addPendingSubscription(fromParts[0]); } } else { //Log.d(LOGTAG, packet.toString()); @@ -1232,6 +1236,10 @@ public class XmppConnectionService extends Service { account.getXmppConnection().sendIqPacket(iq, null); if (autoGrant) { requestPresenceUpdatesFrom(contact); + if (account.getXmppConnection().hasPendingSubscription(contact.getJid())) { + Log.d("xmppService","contact had pending subscription"); + sendPresenceUpdatesTo(contact); + } } replaceContactInConversation(contact.getJid(), contact); } diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java index 41791dc20..adb27ec8c 100644 --- a/src/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java @@ -77,6 +77,8 @@ public class XmppConnection implements Runnable { private Element streamFeatures; private HashMap> disco = new HashMap>(); + private HashSet pendingSubscriptions = new HashSet(); + private String streamId = null; private int smVersion = 3; @@ -904,4 +906,13 @@ public class XmppConnection implements Runnable { public String getMucServer() { return findDiscoItemByFeature("http://jabber.org/protocol/muc"); } + + public boolean hasPendingSubscription(String jid) { + return this.pendingSubscriptions.contains(jid); + } + + public void addPendingSubscription(String jid) { + Log.d(LOGTAG,"adding "+jid+" to pending subscriptions"); + this.pendingSubscriptions.add(jid); + } }