CarbonsManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.content.Context;
 4import android.util.Log;
 5import androidx.annotation.NonNull;
 6import com.google.common.util.concurrent.FutureCallback;
 7import com.google.common.util.concurrent.Futures;
 8import com.google.common.util.concurrent.MoreExecutors;
 9import eu.siacs.conversations.Config;
10import eu.siacs.conversations.services.XmppConnectionService;
11import eu.siacs.conversations.xml.Namespace;
12import eu.siacs.conversations.xmpp.XmppConnection;
13import im.conversations.android.xmpp.model.carbons.Enable;
14import im.conversations.android.xmpp.model.stanza.Iq;
15
16public class CarbonsManager extends AbstractManager {
17
18    private boolean enabled = false;
19
20    public CarbonsManager(final XmppConnectionService context, final XmppConnection connection) {
21        super(context, connection);
22    }
23
24    public void setEnabledOnBind(final boolean enabledOnBind) {
25        this.enabled = enabledOnBind;
26    }
27
28    public void enable() {
29        final var request = new Iq(Iq.Type.SET);
30        request.addExtension(new Enable());
31        final var future = this.connection.sendIqPacket(request);
32        Futures.addCallback(
33                future,
34                new FutureCallback<>() {
35                    @Override
36                    public void onSuccess(final Iq result) {
37                        CarbonsManager.this.enabled = true;
38                        Log.d(
39                                Config.LOGTAG,
40                                getAccount().getJid().asBareJid()
41                                        + ": successfully enabled carbons");
42                    }
43
44                    @Override
45                    public void onFailure(@NonNull final Throwable throwable) {
46                        Log.d(
47                                Config.LOGTAG,
48                                getAccount().getJid().asBareJid() + ": could not enable carbons",
49                                throwable);
50                    }
51                },
52                MoreExecutors.directExecutor());
53    }
54
55    public boolean isEnabled() {
56        return this.enabled;
57    }
58
59    public boolean hasFeature() {
60        return getManager(DiscoManager.class).hasServerFeature(Namespace.CARBONS);
61    }
62}