diff --git a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java index 6c68c654a..7c0ba398f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/UiModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/UiModule.java @@ -8,15 +8,19 @@ *******************************************************************************/ package org.cryptomator.ui; +import dagger.Binds; import dagger.Module; import dagger.Provides; import javafx.beans.binding.Binding; import javafx.beans.binding.Bindings; +import javafx.collections.ObservableList; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.settings.Settings; import org.cryptomator.frontend.webdav.WebDavServer; import org.cryptomator.keychain.KeychainModule; import org.cryptomator.ui.fxapp.FxApplicationScoped; +import org.cryptomator.ui.model.Vault; +import org.cryptomator.ui.model.VaultList; import org.fxmisc.easybind.EasyBind; import javax.inject.Named; @@ -31,13 +35,17 @@ import java.util.function.Consumer; // TODO move to common... @Deprecated(forRemoval = true, since = "1.5.0") @Module(includes = {KeychainModule.class}) -public class UiModule { +public abstract class UiModule { private static final int NUM_SCHEDULER_THREADS = 4; + @Binds + @Singleton + abstract ObservableList bindVaultList(VaultList vaultList); + @Provides @Singleton - ScheduledExecutorService provideScheduledExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { + static ScheduledExecutorService provideScheduledExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { final AtomicInteger threadNumber = new AtomicInteger(1); ScheduledExecutorService executorService = Executors.newScheduledThreadPool(NUM_SCHEDULER_THREADS, r -> { Thread t = new Thread(r); @@ -52,7 +60,7 @@ public class UiModule { // TODO @Binds abstract ExecutorService bindExecutorService(ScheduledExecutorService executor); ? @Provides @Singleton - ExecutorService provideExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { + static ExecutorService provideExecutorService(@Named("shutdownTaskScheduler") Consumer shutdownTaskScheduler) { final AtomicInteger threadNumber = new AtomicInteger(1); ExecutorService executorService = Executors.newCachedThreadPool(r -> { Thread t = new Thread(r); @@ -66,7 +74,7 @@ public class UiModule { @Provides @Singleton - Binding provideServerSocketAddressBinding(Settings settings) { + static Binding provideServerSocketAddressBinding(Settings settings) { return Bindings.createObjectBinding(() -> { String host = SystemUtils.IS_OS_WINDOWS ? "127.0.0.1" : "localhost"; return InetSocketAddress.createUnresolved(host, settings.port().intValue()); @@ -75,7 +83,7 @@ public class UiModule { @Provides @Singleton - WebDavServer provideWebDavServer(Binding serverSocketAddressBinding) { + static WebDavServer provideWebDavServer(Binding serverSocketAddressBinding) { WebDavServer server = WebDavServer.create(); // no need to unsubscribe eventually, because server is a singleton EasyBind.subscribe(serverSocketAddressBinding, server::bind); diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java index ffd771a73..e98e41a6b 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java @@ -28,10 +28,6 @@ abstract class FxApplicationModule { @FxApplicationScoped abstract Application provideApplication(FxApplication application); - // TODO move to commons... - @Binds - abstract ObservableList bindVaultList(VaultList vaultList); - @Provides @FxApplicationScoped static ObjectProperty provideSelectedVault() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java index 1f763965c..4970bbdde 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuController.java @@ -1,6 +1,9 @@ package org.cryptomator.ui.traymenu; +import javafx.beans.Observable; +import javafx.collections.ObservableList; import org.cryptomator.common.settings.Settings; +import org.cryptomator.ui.model.Vault; import javax.inject.Inject; import javax.inject.Named; @@ -17,13 +20,15 @@ class TrayMenuController { private final FxApplicationStarter fxApplicationStarter; private final CountDownLatch shutdownLatch; private final Settings settings; + private final ObservableList vaults; private final PopupMenu menu; @Inject - TrayMenuController(FxApplicationStarter fxApplicationStarter, @Named("shutdownLatch") CountDownLatch shutdownLatch, Settings settings) { + TrayMenuController(FxApplicationStarter fxApplicationStarter, @Named("shutdownLatch") CountDownLatch shutdownLatch, Settings settings, ObservableList vaults) { this.fxApplicationStarter = fxApplicationStarter; this.shutdownLatch = shutdownLatch; this.settings = settings; + this.vaults = vaults; this.menu = new PopupMenu(); } @@ -32,7 +37,8 @@ class TrayMenuController { } public void initTrayMenu() { - // TODO add listeners + vaults.addListener(this::vaultListChanged); + rebuildMenu(); // register preferences shortcut @@ -46,7 +52,13 @@ class TrayMenuController { } } + private void vaultListChanged(Observable observable) { + rebuildMenu(); + } + private void rebuildMenu() { + menu.removeAll(); + MenuItem showMainWindowItem = new MenuItem("TODO show"); showMainWindowItem.addActionListener(this::showMainWindow); menu.add(showMainWindowItem); @@ -56,7 +68,11 @@ class TrayMenuController { menu.add(showPreferencesItem); menu.addSeparator(); - // foreach vault: add submenu + for (Vault v : vaults) { + // TODO what do we want to do with these? lock/unlock? reveal? submenu? + MenuItem vaultItem = new MenuItem(v.getDisplayableName()); + menu.add(vaultItem); + } menu.addSeparator(); MenuItem quitApplicationItem = new MenuItem("TODO quit");