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}