package com.xabber.android.data.extension.csi;
import com.xabber.android.data.log.LogManager;
import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.AccountJid;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.Nonza;
import org.jivesoftware.smackx.csi.packet.ClientStateIndication;
/**
* Client State Indication (XEP-0352) manager
* @author Ricki Hirner (www.bitfire.at)
*/
public class ClientStateManager {
private static final String LOG_TAG = ClientStateManager.class.getSimpleName();
private ClientStateManager() {
}
public static void setInactive() {
sendClientState(ClientStateIndication.Inactive.INSTANCE);
}
public static void setActive() {
sendClientState(ClientStateIndication.Active.INSTANCE);
}
protected static void sendClientState(Nonza nonza) {
AccountManager accountManager = AccountManager.getInstance();
for (AccountJid accountName : accountManager.getEnabledAccounts()) {
AccountItem accountItem = accountManager.getAccount(accountName);
if (accountItem == null) {
continue;
}
AbstractXMPPConnection xmppConnection = accountItem.getConnection();
if (!xmppConnection.isAuthenticated()) {
continue;
}
if (xmppConnection.hasFeature("csi", ClientStateIndication.NAMESPACE))
try {
xmppConnection.sendNonza(nonza);
} catch (SmackException.NotConnectedException | InterruptedException e) {
LogManager.exception(LOG_TAG, e);
}
}
}
}