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