summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/providersetup/fragments/viewmodel/ProviderSelectionViewModel.java
blob: 29dab98ae782340417a993830dc3db8b6c4befff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package se.leap.bitmaskclient.providersetup.fragments.viewmodel;

import android.content.Context;
import android.content.res.AssetManager;
import android.util.Patterns;
import android.view.View;
import android.webkit.URLUtil;

import androidx.lifecycle.ViewModel;

import java.util.List;

import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.models.Provider;
import se.leap.bitmaskclient.providersetup.ProviderManager;

public class ProviderSelectionViewModel extends ViewModel {
    private final ProviderManager providerManager;
    public static int ADD_PROVIDER = 100100100;

    private int selected = 0;
    private String customUrl;

    public ProviderSelectionViewModel(AssetManager assetManager) {
        providerManager = ProviderManager.getInstance(assetManager);
        providerManager.setAddDummyEntry(false);
    }

    public int size() {
        return providerManager.size();
    }

    public List<Provider> providers() {
        return providerManager.providers();
    }

   public Provider getProvider(int pos) {
        return providerManager.get(pos);
   }

    public void setSelected(int checkedId) {
        selected = checkedId;
    }

    public int getSelected() {
        return selected;
    }

    public boolean isValidConfig() {
        if (selected == ADD_PROVIDER) {
            return customUrl != null && (Patterns.DOMAIN_NAME.matcher(customUrl).matches() || (URLUtil.isNetworkUrl(customUrl) && Patterns.WEB_URL.matcher(customUrl).matches()));
        }
        return true;
    }

    public boolean isCustomProviderSelected() {
        return selected == ADD_PROVIDER;
    }

    public CharSequence getProviderDescription(Context context) {
        if (selected == ADD_PROVIDER) {
            return context.getText(R.string.add_provider_description);
        }
        Provider provider = getProvider(selected);
        if ("riseup.net".equals(provider.getDomain())) {
            return context.getText(R.string.provider_description_riseup);
        }
        if ("calyx.net".equals(provider.getDomain())) {
            return context.getText(R.string.provider_description_calyx);
        }
        return provider.getDescription();
    }

    public int getEditProviderVisibility() {
        if (selected == ADD_PROVIDER) {
            return View.VISIBLE;
        }
        return View.GONE;
    }

    public void setCustomUrl(String url) {
        customUrl = url;
    }

    public String getCustomUrl() {
        if (customUrl != null && Patterns.DOMAIN_NAME.matcher(customUrl).matches()) {
            return "https://" + customUrl;
        }
        return customUrl;
    }


    public String getProviderName(int pos) {
        String domain = getProvider(pos).getDomain();
        if ("riseup.net".equals(domain)) {
            return "Riseup";
        }
        if ("calyx.net".equals(domain)) {
            return "The Calyx Institute";
        }
        return domain;
    }
}