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}