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 boolean hasEnabledAccounts(final XmppConnectionService service) {
 28        final List<Account> accounts = service.getAccounts();
 29        for(Account account : accounts) {
 30            if (account.isOptionSet(Account.OPTION_DISABLED)) {
 31                return false;
 32            }
 33        }
 34        return false;
 35    }
 36
 37    public static List<String> getEnabledAccounts(final XmppConnectionService service) {
 38        ArrayList<String> accounts = new ArrayList<>();
 39        for (Account account : service.getAccounts()) {
 40            if (account.getStatus() != Account.State.DISABLED) {
 41                if (Config.DOMAIN_LOCK != null) {
 42                    accounts.add(account.getJid().getEscapedLocal());
 43                } else {
 44                    accounts.add(account.getJid().asBareJid().toEscapedString());
 45                }
 46            }
 47        }
 48        return accounts;
 49    }
 50
 51    public static Account getFirstEnabled(XmppConnectionService service) {
 52        final List<Account> accounts = service.getAccounts();
 53        for(Account account : accounts) {
 54            if (!account.isOptionSet(Account.OPTION_DISABLED)) {
 55                return account;
 56            }
 57        }
 58        return null;
 59    }
 60
 61    public static Account getFirst(XmppConnectionService service) {
 62        final List<Account> accounts = service.getAccounts();
 63        for(Account account : accounts) {
 64            return account;
 65        }
 66        return null;
 67    }
 68
 69    public static Account getPendingAccount(XmppConnectionService service) {
 70        Account pending = null;
 71        for (Account account : service.getAccounts()) {
 72            if (!account.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY)) {
 73                pending = account;
 74            } else {
 75                return null;
 76            }
 77        }
 78        return pending;
 79    }
 80
 81    public static void launchManageAccounts(final Activity activity) {
 82        if (MANAGE_ACCOUNT_ACTIVITY != null) {
 83            activity.startActivity(new Intent(activity, MANAGE_ACCOUNT_ACTIVITY));
 84        } else {
 85            Toast.makeText(activity, R.string.feature_not_implemented, Toast.LENGTH_SHORT).show();
 86        }
 87    }
 88
 89    public static void launchManageAccount(final XmppActivity xmppActivity) {
 90        final Account account = getFirst(xmppActivity.xmppConnectionService);
 91        xmppActivity.switchToAccount(account);
 92    }
 93
 94    private static Class<?> getManageAccountActivityClass() {
 95        try {
 96            return Class.forName("eu.siacs.conversations.ui.ManageAccountActivity");
 97        } catch (final ClassNotFoundException e) {
 98            return null;
 99        }
100    }
101
102    public static void showHideMenuItems(final Menu menu) {
103        final MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
104        final MenuItem manageAccount = menu.findItem(R.id.action_account);
105        if (manageAccount != null) {
106            manageAccount.setVisible(MANAGE_ACCOUNT_ACTIVITY == null);
107        }
108        if (manageAccounts != null) {
109            manageAccounts.setVisible(MANAGE_ACCOUNT_ACTIVITY != null);
110        }
111    }
112}