package org.sechat.app.services; /** * Copyright (c) 2014 Sechat GbR <support@sechat.org> * * You should have received a copy of the MIT License * along with this program (license.txt). * If not, see <http://sechat.github.io/license.txt>. */ import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Presence; import android.app.Activity; import android.util.Log; import org.sechat.app.ThreadHelper; public class SubscriptionHandler implements PacketListener { private static ThreadHelper th = new ThreadHelper(); Activity act; String TAG = getClass().getName(); public SubscriptionHandler(Activity act) { this.act = act; } @Override public void processPacket(Packet aPacket) { if ((ThreadHelper.xmppConnection == null) || (!ThreadHelper.xmppConnection.isAuthenticated())) { Log.e(TAG, "Cannot accept subscription! Server connection was not authenticated."); return; } if (aPacket instanceof Presence) { Presence p = (Presence) aPacket; Roster roster = ThreadHelper.xmppConnection.getRoster(); Boolean known = roster.contains(aPacket.getFrom()); if (th.D) Log.d(TAG, aPacket.getFrom()+" "+p.getType().name()); if (Presence.Type.subscribe.equals(p.getType())) { Presence subscribed = new Presence(Presence.Type.subscribed); subscribed.setTo(aPacket.getFrom()); ThreadHelper.xmppConnection.sendPacket(subscribed); if (!known) { Presence subscribe = new Presence(Presence.Type.subscribe); subscribe.setTo(aPacket.getFrom()); ThreadHelper.xmppConnection.sendPacket(subscribe); } } if (Presence.Type.unsubscribe.equals(p.getType()) && known) { Presence unsubscribed = new Presence(Presence.Type.unsubscribed); unsubscribed.setTo(aPacket.getFrom()); ThreadHelper.xmppConnection.sendPacket(unsubscribed); if (known) { Presence unsubscribe = new Presence(Presence.Type.unsubscribe); unsubscribe.setTo(aPacket.getFrom()); ThreadHelper.xmppConnection.sendPacket(unsubscribe); } } } } }