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;
 11import java.util.UUID;
 12
 13import eu.siacs.conversations.Config;
 14import eu.siacs.conversations.R;
 15import eu.siacs.conversations.entities.Account;
 16import eu.siacs.conversations.services.XmppConnectionService;
 17import eu.siacs.conversations.ui.XmppActivity;
 18
 19public class AccountUtils {
 20
 21    public static final Class<?> MANAGE_ACCOUNT_ACTIVITY;
 22
 23    static {
 24        MANAGE_ACCOUNT_ACTIVITY = getManageAccountActivityClass();
 25    }
 26
 27
 28    public static boolean hasEnabledAccounts(final XmppConnectionService service) {
 29        final List<Account> accounts = service.getAccounts();
 30        for(Account account : accounts) {
 31            if (account.isOptionSet(Account.OPTION_DISABLED)) {
 32                return false;
 33            }
 34        }
 35        return false;
 36    }
 37
 38    public static String publicDeviceId(final Account account) {
 39        final UUID uuid;
 40        try {
 41            uuid = UUID.fromString(account.getUuid());
 42        } catch (final IllegalArgumentException e) {
 43            return account.getUuid();
 44        }
 45        final UUID publicDeviceId = getUuid(uuid.getLeastSignificantBits(), uuid.getLeastSignificantBits());
 46        return publicDeviceId.toString();
 47    }
 48
 49    protected static UUID getUuid(final long msb, final long lsb) {
 50        final long msb0 = (msb & 0xffffffffffff0fffL) | 4; // set version
 51        final long lsb0 = (lsb & 0x3fffffffffffffffL) | 0x8000000000000000L; // set variant
 52        return new UUID(msb0, lsb0);
 53    }
 54
 55    public static List<String> getEnabledAccounts(final XmppConnectionService service) {
 56        ArrayList<String> accounts = new ArrayList<>();
 57        for (Account account : service.getAccounts()) {
 58            if (account.getStatus() != Account.State.DISABLED) {
 59                if (Config.DOMAIN_LOCK != null) {
 60                    accounts.add(account.getJid().getEscapedLocal());
 61                } else {
 62                    accounts.add(account.getJid().asBareJid().toEscapedString());
 63                }
 64            }
 65        }
 66        return accounts;
 67    }
 68
 69    public static Account getFirstEnabled(XmppConnectionService service) {
 70        final List<Account> accounts = service.getAccounts();
 71        for(Account account : accounts) {
 72            if (!account.isOptionSet(Account.OPTION_DISABLED)) {
 73                return account;
 74            }
 75        }
 76        return null;
 77    }
 78
 79    public static Account getFirst(XmppConnectionService service) {
 80        final List<Account> accounts = service.getAccounts();
 81        for(Account account : accounts) {
 82            return account;
 83        }
 84        return null;
 85    }
 86
 87    public static Account getPendingAccount(XmppConnectionService service) {
 88        Account pending = null;
 89        for (Account account : service.getAccounts()) {
 90            if (!account.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY)) {
 91                pending = account;
 92            } else {
 93                return null;
 94            }
 95        }
 96        return pending;
 97    }
 98
 99    public static void launchManageAccounts(final Activity activity) {
100        if (MANAGE_ACCOUNT_ACTIVITY != null) {
101            activity.startActivity(new Intent(activity, MANAGE_ACCOUNT_ACTIVITY));
102        } else {
103            Toast.makeText(activity, R.string.feature_not_implemented, Toast.LENGTH_SHORT).show();
104        }
105    }
106
107    public static void launchManageAccount(final XmppActivity xmppActivity) {
108        final Account account = getFirst(xmppActivity.xmppConnectionService);
109        xmppActivity.switchToAccount(account);
110    }
111
112    private static Class<?> getManageAccountActivityClass() {
113        try {
114            return Class.forName("eu.siacs.conversations.ui.ManageAccountActivity");
115        } catch (final ClassNotFoundException e) {
116            return null;
117        }
118    }
119
120    public static void showHideMenuItems(final Menu menu) {
121        final MenuItem manageAccounts = menu.findItem(R.id.action_accounts);
122        final MenuItem manageAccount = menu.findItem(R.id.action_account);
123        if (manageAccount != null) {
124            manageAccount.setVisible(MANAGE_ACCOUNT_ACTIVITY == null);
125        }
126        if (manageAccounts != null) {
127            manageAccounts.setVisible(MANAGE_ACCOUNT_ACTIVITY != null);
128        }
129    }
130}