aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java100
-rw-r--r--src/main/res/menu/manageaccounts.xml28
-rw-r--r--src/main/res/values/strings.xml2
3 files changed, 103 insertions, 27 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java
index 906a16cc..b3ab5ee6 100644
--- a/src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java
@@ -26,21 +26,25 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
protected Account selectedAccount = null;
- protected List<Account> accountList = new ArrayList<Account>();
+ protected final List<Account> accountList = new ArrayList<>();
protected ListView accountListView;
protected AccountAdapter mAccountAdapter;
- @Override
- public void onAccountUpdate() {
+
+ @Override
+ public void onAccountUpdate() {
+ synchronized (this.accountList) {
accountList.clear();
accountList.addAll(xmppConnectionService.getAccounts());
- runOnUiThread(new Runnable() {
-
- @Override
- public void run() {
- mAccountAdapter.notifyDataSetChanged();
- }
- });
}
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ invalidateOptionsMenu();
+ mAccountAdapter.notifyDataSetChanged();
+ }
+ });
+ }
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -91,6 +95,14 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.manageaccounts, menu);
+ MenuItem enableAll = menu.findItem(R.id.action_enable_all);
+ if (!accountsLeftToEnable()) {
+ enableAll.setVisible(false);
+ }
+ MenuItem disableAll = menu.findItem(R.id.action_disable_all);
+ if (!accountsLeftToDisable()) {
+ disableAll.setVisible(false);
+ }
return true;
}
@@ -120,12 +132,18 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case R.id.action_add_account:
- startActivity(new Intent(getApplicationContext(),
- EditAccountActivity.class));
- break;
- default:
- break;
+ case R.id.action_add_account:
+ startActivity(new Intent(getApplicationContext(),
+ EditAccountActivity.class));
+ break;
+ case R.id.action_disable_all:
+ disableAllAccounts();
+ break;
+ case R.id.action_enable_all:
+ enableAllAccounts();
+ break;
+ default:
+ break;
}
return super.onOptionsItemSelected(item);
}
@@ -158,6 +176,56 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
startActivity(intent);
}
+ private void disableAllAccounts() {
+ List<Account> list = new ArrayList<>();
+ synchronized (this.accountList) {
+ for (Account account : this.accountList) {
+ if (!account.isOptionSet(Account.OPTION_DISABLED)) {
+ list.add(account);
+ }
+ }
+ }
+ for(Account account : list) {
+ disableAccount(account);
+ }
+ }
+
+ private boolean accountsLeftToDisable() {
+ synchronized (this.accountList) {
+ for (Account account : this.accountList) {
+ if (!account.isOptionSet(Account.OPTION_DISABLED)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ private boolean accountsLeftToEnable() {
+ synchronized (this.accountList) {
+ for (Account account : this.accountList) {
+ if (account.isOptionSet(Account.OPTION_DISABLED)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ private void enableAllAccounts() {
+ List<Account> list = new ArrayList<>();
+ synchronized (this.accountList) {
+ for (Account account : this.accountList) {
+ if (account.isOptionSet(Account.OPTION_DISABLED)) {
+ list.add(account);
+ }
+ }
+ }
+ for(Account account : list) {
+ enableAccount(account);
+ }
+ }
+
private void disableAccount(Account account) {
account.setOption(Account.OPTION_DISABLED, true);
xmppConnectionService.updateAccount(account);
diff --git a/src/main/res/menu/manageaccounts.xml b/src/main/res/menu/manageaccounts.xml
index b5cd9b50..5b04484f 100644
--- a/src/main/res/menu/manageaccounts.xml
+++ b/src/main/res/menu/manageaccounts.xml
@@ -1,15 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/action_add_account"
- android:icon="@drawable/ic_action_add_person"
- android:showAsAction="always"
- android:title="@string/action_add_account"/>
- <item
- android:id="@+id/action_settings"
- android:orderInCategory="100"
- android:showAsAction="never"
- android:title="@string/action_settings"/>
+ <item
+ android:id="@+id/action_add_account"
+ android:icon="@drawable/ic_action_add_person"
+ android:showAsAction="always"
+ android:title="@string/action_add_account"/>
+ <item
+ android:id="@+id/action_enable_all"
+ android:title="@string/enable_all_accounts"/>
+ <item
+ android:id="@+id/action_disable_all"
+ android:title="@string/disable_all_accounts"/>
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_settings"/>
</menu> \ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index ebb95278..73259228 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -403,4 +403,6 @@
<string name="current_password">Current password</string>
<string name="new_password">New password</string>
<string name="password_should_not_be_empty">Password should not be empty</string>
+ <string name="enable_all_accounts">Enable all accounts</string>
+ <string name="disable_all_accounts">Disable all accounts</string>
</resources>