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}