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}