AccountUtils.java

 1package eu.siacs.conversations.utils;
 2
 3import android.app.Activity;
 4import android.content.Intent;
 5import android.view.Menu;
 6import android.view.MenuItem;
 7import android.widget.Toast;
 8
 9import java.util.ArrayList;
10import java.util.List;
11
12import eu.siacs.conversations.Config;
13import eu.siacs.conversations.R;
14import eu.siacs.conversations.entities.Account;
15import eu.siacs.conversations.services.XmppConnectionService;
16import eu.siacs.conversations.ui.XmppActivity;
17
18public class AccountUtils {
19
20    public static final Class MANAGE_ACCOUNT_ACTIVITY;
21
22    static {
23        MANAGE_ACCOUNT_ACTIVITY = getManageAccountActivityClass();
24    }
25
26
27    public static List<String> getEnabledAccounts(final XmppConnectionService service) {
28        ArrayList<String> accounts = new ArrayList<>();
29        for (Account account : service.getAccounts()) {
30            if (account.getStatus() != Account.State.DISABLED) {
31                if (Config.DOMAIN_LOCK != null) {
32                    accounts.add(account.getJid().getLocal());
33                } else {
34                    accounts.add(account.getJid().asBareJid().toString());
35                }
36            }
37        }
38        return accounts;
39    }
40
41    public static Account getFirstEnabled(XmppConnectionService service) {
42        final List<Account> accounts = service.getAccounts();
43        for(Account account : accounts) {
44            if (!account.isOptionSet(Account.OPTION_DISABLED)) {
45                return account;
46            }
47        }
48        return null;
49    }
50
51    public static Account getFirst(XmppConnectionService service) {
52        final List<Account> accounts = service.getAccounts();
53        for(Account account : accounts) {
54            return account;
55        }
56        return null;
57    }
58
59    public static Account getPendingAccount(XmppConnectionService service) {
60        Account pending = null;
61        for (Account account : service.getAccounts()) {
62            if (!account.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY)) {
63                pending = account;
64            } else {
65                return null;
66            }
67        }
68        return pending;
69    }
70
71    public static void launchManageAccounts(Activity activity) {
72        if (MANAGE_ACCOUNT_ACTIVITY != null) {
73            activity.startActivity(new Intent(activity, MANAGE_ACCOUNT_ACTIVITY));
74        } else {
75            Toast.makeText(activity, R.string.feature_not_implemented, Toast.LENGTH_SHORT).show();
76        }
77    }
78
79    public static void launchManageAccount(XmppActivity xmppActivity) {
80        Account account = getFirst(xmppActivity.xmppConnectionService);
81        xmppActivity.switchToAccount(account);
82    }
83
84    private static Class getManageAccountActivityClass() {
85        try {
86            return Class.forName("eu.siacs.conversations.ui.ManageAccountActivity");
87        } catch (ClassNotFoundException e) {
88            return null;
89        }
90    }
91
92    public static void showHideMenuItems(final Menu menu) {
93        final MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
94        final MenuItem manageAccount = menu.findItem(R.id.action_account);
95        manageAccount.setVisible(MANAGE_ACCOUNT_ACTIVITY == null);
96        manageAccounts.setVisible(MANAGE_ACCOUNT_ACTIVITY != null);
97    }
98}