diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java index c75aeea8d..dd1fb4152 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java @@ -7,10 +7,12 @@ import javafx.beans.value.ObservableValue; import javafx.stage.Stage; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.UiTheme; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.jni.MacApplicationUiAppearance; import org.cryptomator.jni.MacFunctions; import org.cryptomator.ui.mainwindow.MainWindowComponent; import org.cryptomator.ui.preferences.PreferencesComponent; +import org.cryptomator.ui.unlock.UnlockComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,13 +29,15 @@ public class FxApplication extends Application { private final Settings settings; private final Lazy mainWindow; private final Lazy preferencesWindow; + private final UnlockComponent.Builder unlockWindowBuilder; private final Optional macFunctions; @Inject - FxApplication(Settings settings, Lazy mainWindow, Lazy preferencesWindow, Optional macFunctions) { + FxApplication(Settings settings, Lazy mainWindow, Lazy preferencesWindow, UnlockComponent.Builder unlockWindowBuilder, Optional macFunctions) { this.settings = settings; this.mainWindow = mainWindow; this.preferencesWindow = preferencesWindow; + this.unlockWindowBuilder = unlockWindowBuilder; this.macFunctions = macFunctions; } @@ -64,6 +68,13 @@ public class FxApplication extends Application { }); } + public void showUnlockWindow(Vault vault) { + Platform.runLater(() -> { + unlockWindowBuilder.vault(vault).build().showUnlockWindow(); + LOG.debug("Showing UnlockWindow for {}", vault.getDisplayableName()); + }); + } + private void themeChanged(@SuppressWarnings("unused") ObservableValue observable, @SuppressWarnings("unused") UiTheme oldValue, UiTheme newValue) { loadSelectedStyleSheet(newValue); } diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java index 3cf8bee64..d16aa4b4c 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java @@ -3,10 +3,10 @@ package org.cryptomator.ui.mainwindow; import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.fxml.FXML; +import org.cryptomator.common.vaults.Vault; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.Tasks; -import org.cryptomator.common.vaults.Vault; -import org.cryptomator.ui.unlock.UnlockComponent; +import org.cryptomator.ui.fxapp.FxApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,31 +15,23 @@ import java.util.concurrent.ExecutorService; @MainWindowScoped public class VaultDetailController implements FxController { - + private static final Logger LOG = LoggerFactory.getLogger(VaultDetailController.class); - + private final ReadOnlyObjectProperty vault; private final ExecutorService executor; - private final UnlockComponent.Builder unlockWindow; + private final FxApplication application; @Inject - VaultDetailController(ObjectProperty vault, ExecutorService executor, UnlockComponent.Builder unlockWindow) { + VaultDetailController(ObjectProperty vault, ExecutorService executor, FxApplication application) { this.vault = vault; this.executor = executor; - this.unlockWindow = unlockWindow; - } - - public ReadOnlyObjectProperty vaultProperty() { - return vault; - } - - public Vault getVault() { - return vault.get(); + this.application = application; } @FXML public void unlock() { - unlockWindow.vault(vault.get()).build().showUnlockWindow(); + application.showUnlockWindow(vault.get()); } @FXML @@ -55,4 +47,15 @@ public class VaultDetailController implements FxController { // TODO }).runOnce(executor); } + + /* Observable Properties */ + + public ReadOnlyObjectProperty vaultProperty() { + return vault; + } + + public Vault getVault() { + return vault.get(); + } + } 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 b5ef4c9cf..1c7aaa7d9 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 @@ -13,8 +13,10 @@ import java.awt.Menu; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.EventObject; import java.util.concurrent.CountDownLatch; +import java.util.function.Consumer; @TrayMenuScoped class TrayMenuController { @@ -94,6 +96,7 @@ class TrayMenuController { // TODO add action listeners if (vault.isLocked()) { MenuItem unlockItem = new MenuItem("TODO unlock"); + unlockItem.addActionListener(createActionListenerForVault(vault, this::unlockVault)); submenu.add(unlockItem); } else if (vault.isUnlocked()) { MenuItem lockItem = new MenuItem("TODO lock"); @@ -104,6 +107,14 @@ class TrayMenuController { } } + private ActionListener createActionListenerForVault(Vault vault, Consumer consumer) { + return actionEvent -> consumer.accept(vault); + } + + private void unlockVault(Vault vault) { + fxApplicationStarter.get(true).thenAccept(app -> app.showUnlockWindow(vault)); + } + void showMainWindow(@SuppressWarnings("unused") ActionEvent actionEvent) { fxApplicationStarter.get(true).thenAccept(FxApplication::showMainWindow); }