package com.xabber.android.data.roster; import com.xabber.android.data.Application; import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.entity.AccountJid; import com.xabber.android.data.log.LogManager; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.roster.Roster; import org.jivesoftware.smack.roster.RosterListener; import org.jivesoftware.smack.roster.RosterLoadedListener; import org.jxmpp.jid.Jid; import java.util.Collection; public class AccountRosterListener implements RosterListener, RosterLoadedListener { private AccountJid account; public AccountJid getAccount() { return account; } public AccountRosterListener(AccountJid account) { this.account = account; } private String getLogTag() { StringBuilder logTag = new StringBuilder(); logTag.append(getClass().getSimpleName()); if (account != null) { logTag.append(": "); logTag.append(account); } return logTag.toString(); } @Override public void entriesAdded(Collection<Jid> addresses) { LogManager.i(getLogTag(), "entriesAdded " + addresses); RosterManager.getInstance().onContactsAdded(account, addresses); } @Override public void entriesUpdated(Collection<Jid> addresses) { LogManager.i(getLogTag(), "entriesUpdated " + addresses); RosterManager.getInstance().onContactsUpdated(account, addresses); } @Override public void entriesDeleted(Collection<Jid> addresses) { LogManager.i(getLogTag(), "entriesDeleted " + addresses); RosterManager.getInstance().onContactsDeleted(account, addresses); } @Override public void presenceChanged(Presence presence) { PresenceManager.getInstance().onPresenceChanged(account, presence); } @Override public void onRosterLoaded(Roster roster) { LogManager.i(getLogTag(), "onRosterLoaded"); final AccountItem accountItem = AccountManager.getInstance().getAccount(AccountRosterListener.this.account); if (accountItem != null) { for (OnRosterReceivedListener listener : Application.getInstance().getManagers(OnRosterReceivedListener.class)) { listener.onRosterReceived(accountItem); } } AccountManager.getInstance().onAccountChanged(AccountRosterListener.this.account); } @Override public void onRosterLoadingFailed(Exception e) { LogManager.e(getLogTag(), "onRosterLoadingFailed"); LogManager.exception(getLogTag(), e); } }