disable / enable all accounts

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java | 100 
src/main/res/menu/manageaccounts.xml                               |  28 
src/main/res/values/strings.xml                                    |   2 
3 files changed, 103 insertions(+), 27 deletions(-)

Detailed changes

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);

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>

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>