Browse Source

Trigger list change events when a vault changes its state, thus removing need for additional state listeners

Sebastian Stenzel 6 years ago
parent
commit
7453431bcd

+ 5 - 2
main/commons/src/main/java/org/cryptomator/common/CommonsModule.java

@@ -10,6 +10,7 @@ import dagger.Module;
 import dagger.Provides;
 import javafx.beans.binding.Binding;
 import javafx.beans.binding.Bindings;
+import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import org.apache.commons.lang3.SystemUtils;
 import org.cryptomator.common.settings.Settings;
@@ -48,9 +49,11 @@ public abstract class CommonsModule {
 		return settingsProvider.get();
 	}
 
-	@Binds
+	@Provides
 	@Singleton
-	abstract ObservableList<Vault> bindVaultList(VaultList vaultList);
+	static ObservableList<Vault> provideVaultList(VaultList vaultList) {
+		return FXCollections.observableList(vaultList, Vault::observables);
+	}
 
 	@Provides
 	@Singleton

+ 3 - 8
main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java

@@ -85,14 +85,7 @@ class TrayMenuController {
 
 	private Menu buildSubmenu(Vault vault) {
 		Menu submenu = new Menu(vault.getDisplayableName());
-		vault.stateProperty().addListener(observable -> rebuildSubmenu(submenu, vault));
-		rebuildSubmenu(submenu, vault);
-		return submenu;
-	}
-
-	private void rebuildSubmenu(Menu submenu, Vault vault) {
-		submenu.removeAll();
-
+		
 		// TODO add action listeners
 		if (vault.isLocked()) {
 			MenuItem unlockItem = new MenuItem("TODO unlock");
@@ -105,6 +98,8 @@ class TrayMenuController {
 			MenuItem revealItem = new MenuItem("TODO reveal");
 			submenu.add(revealItem);
 		}
+		
+		return submenu;
 	}
 
 	private ActionListener createActionListenerForVault(Vault vault, Consumer<Vault> consumer) {