1package eu.siacs.conversations.utils;
 2
 3import android.os.Parcel;
 4import android.os.Parcelable;
 5
 6import com.google.common.base.Strings;
 7import com.google.common.collect.ImmutableList;
 8
 9import java.util.Collections;
10import java.util.List;
11
12import eu.siacs.conversations.entities.Account;
13import eu.siacs.conversations.services.QuickConversationsService;
14import eu.siacs.conversations.services.XmppConnectionService;
15import eu.siacs.conversations.xmpp.XmppConnection;
16
17public class EasyOnboardingInvite implements Parcelable {
18
19    private final String domain;
20    private final String uri;
21    private final String landingUrl;
22
23    protected EasyOnboardingInvite(Parcel in) {
24        domain = in.readString();
25        uri = in.readString();
26        landingUrl = in.readString();
27    }
28
29    public EasyOnboardingInvite(String domain, String uri, String landingUrl) {
30        this.domain = domain;
31        this.uri = uri;
32        this.landingUrl = landingUrl;
33    }
34
35    @Override
36    public void writeToParcel(Parcel dest, int flags) {
37        dest.writeString(domain);
38        dest.writeString(uri);
39        dest.writeString(landingUrl);
40    }
41
42    @Override
43    public int describeContents() {
44        return 0;
45    }
46
47    public static final Creator<EasyOnboardingInvite> CREATOR = 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).size() > 0;
64
65    }
66
67    public static List<Account> getSupportingAccounts(final XmppConnectionService service) {
68        final ImmutableList.Builder<Account> supportingAccountsBuilder = new ImmutableList.Builder<>();
69        final List<Account> accounts = service == null ? Collections.emptyList() : service.getAccounts();
70        for(Account account : accounts) {
71            final XmppConnection xmppConnection = account.getXmppConnection();
72            if (xmppConnection != null && xmppConnection.getFeatures().easyOnboardingInvites()) {
73                supportingAccountsBuilder.add(account);
74            }
75        }
76        return supportingAccountsBuilder.build();
77    }
78
79
80    public String getShareableLink() {
81        return Strings.isNullOrEmpty(landingUrl) ? uri : landingUrl;
82    }
83
84    public String getUri() {
85        return uri;
86    }
87
88    public String getDomain() {
89        return domain;
90    }
91
92    public interface OnInviteRequested {
93        void inviteRequested(EasyOnboardingInvite invite);
94        void inviteRequestFailed(String message);
95    }
96}