EasyOnboardingInvite.java

 1package eu.siacs.conversations.utils;
 2
 3import android.os.Parcel;
 4import android.os.Parcelable;
 5import com.google.common.base.Strings;
 6import com.google.common.collect.ImmutableList;
 7import eu.siacs.conversations.entities.Account;
 8import eu.siacs.conversations.services.QuickConversationsService;
 9import eu.siacs.conversations.services.XmppConnectionService;
10import eu.siacs.conversations.xml.Namespace;
11import eu.siacs.conversations.xmpp.manager.DiscoManager;
12import java.util.Collections;
13import java.util.List;
14import java.util.Objects;
15
16public class EasyOnboardingInvite implements Parcelable {
17
18    private final String domain;
19    private final String uri;
20    private final String landingUrl;
21
22    protected EasyOnboardingInvite(Parcel in) {
23        domain = in.readString();
24        uri = in.readString();
25        landingUrl = in.readString();
26    }
27
28    public EasyOnboardingInvite(String domain, String uri, String landingUrl) {
29        this.domain = domain;
30        this.uri = uri;
31        this.landingUrl = landingUrl;
32    }
33
34    @Override
35    public void writeToParcel(Parcel dest, int flags) {
36        dest.writeString(domain);
37        dest.writeString(uri);
38        dest.writeString(landingUrl);
39    }
40
41    @Override
42    public int describeContents() {
43        return 0;
44    }
45
46    public static final Creator<EasyOnboardingInvite> CREATOR =
47            new Creator<EasyOnboardingInvite>() {
48                @Override
49                public EasyOnboardingInvite createFromParcel(Parcel in) {
50                    return new EasyOnboardingInvite(in);
51                }
52
53                @Override
54                public EasyOnboardingInvite[] newArray(int size) {
55                    return new EasyOnboardingInvite[size];
56                }
57            };
58
59    public static boolean anyHasSupport(final XmppConnectionService service) {
60        if (QuickConversationsService.isQuicksy()) {
61            return false;
62        }
63        return !getSupportingAccounts(service).isEmpty();
64    }
65
66    public static List<Account> getSupportingAccounts(final XmppConnectionService service) {
67        final ImmutableList.Builder<Account> supportingAccountsBuilder =
68                new ImmutableList.Builder<>();
69        final List<Account> accounts =
70                service == null ? Collections.emptyList() : service.getAccounts();
71        for (final var account : accounts) {
72            final var connection = account.getXmppConnection();
73            final var discoManager = connection.getManager(DiscoManager.class);
74            if (Objects.nonNull(
75                    discoManager.getAddressForCommand(Namespace.EASY_ONBOARDING_INVITE))) {
76                supportingAccountsBuilder.add(account);
77            }
78        }
79        return supportingAccountsBuilder.build();
80    }
81
82    public String getShareableLink() {
83        return Strings.isNullOrEmpty(landingUrl) ? uri : landingUrl;
84    }
85
86    public String getDomain() {
87        return domain;
88    }
89
90    public interface OnInviteRequested {
91        void inviteRequested(EasyOnboardingInvite invite);
92
93        void inviteRequestFailed(String message);
94    }
95}