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}