From 720478c2f41c48314e456ea9b10f27ce2b5598b5 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Fri, 9 Jul 2021 14:47:07 +0200 Subject: [PATCH] Further adjustment to workflow: * bind modality to vault options window * open unlock in a new window and close it afterwards --- .../ui/health/HealthCheckComponent.java | 4 ++++ .../ui/health/HealthCheckModule.java | 20 +++++++++++++++---- .../ui/health/StartController.java | 6 +++++- .../GeneralVaultOptionsController.java | 2 +- src/main/resources/i18n/strings.properties | 2 +- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java b/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java index 851499a8c..ff3902c6a 100644 --- a/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java +++ b/src/main/java/org/cryptomator/ui/health/HealthCheckComponent.java @@ -8,6 +8,7 @@ import org.cryptomator.cryptofs.VaultConfig; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javafx.scene.Scene; import javafx.stage.Stage; @@ -44,6 +45,9 @@ public interface HealthCheckComponent { @BindsInstance Builder vault(@HealthCheckWindow Vault vault); + @BindsInstance + Builder owner(@Named("healthCheckOwner") Stage owner); + HealthCheckComponent build(); } diff --git a/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java b/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java index 958277bbe..0d1c5f174 100644 --- a/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java +++ b/src/main/java/org/cryptomator/ui/health/HealthCheckModule.java @@ -17,8 +17,8 @@ import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.common.StageFactory; import org.cryptomator.ui.keyloading.KeyLoadingComponent; import org.cryptomator.ui.keyloading.KeyLoadingStrategy; -import org.cryptomator.ui.mainwindow.MainWindow; +import javax.inject.Named; import javax.inject.Provider; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; @@ -74,7 +74,7 @@ abstract class HealthCheckModule { @Provides @HealthCheckWindow @HealthCheckScoped - static KeyLoadingStrategy provideKeyLoadingStrategy(KeyLoadingComponent.Builder compBuilder, @HealthCheckWindow Vault vault, @HealthCheckWindow Stage window) { + static KeyLoadingStrategy provideKeyLoadingStrategy(KeyLoadingComponent.Builder compBuilder, @HealthCheckWindow Vault vault, @Named("unlockWindow") Stage window ) { return compBuilder.vault(vault).window(window).build().keyloadingStrategy(); } @@ -85,14 +85,26 @@ abstract class HealthCheckModule { return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle); } + @Provides + @Named("unlockWindow") + @HealthCheckScoped + static Stage provideUnlockWindow (@HealthCheckWindow Stage window, @HealthCheckWindow Vault vault, StageFactory factory, ResourceBundle resourceBundle) { + Stage stage = factory.create(); + stage.initModality(Modality.WINDOW_MODAL); + stage.initOwner(window); + stage.setTitle(String.format("TODO: Unlock \"%s\"", vault.getDisplayName())); + stage.setResizable(false); + return stage; + } + @Provides @HealthCheckWindow @HealthCheckScoped - static Stage provideStage(StageFactory factory, @MainWindow Stage owner, ResourceBundle resourceBundle, ChangeListener showingListener) { + static Stage provideStage(StageFactory factory, @Named("healthCheckOwner") Stage owner, @HealthCheckWindow Vault vault, ChangeListener showingListener, ResourceBundle resourceBundle) { Stage stage = factory.create(); stage.initModality(Modality.WINDOW_MODAL); stage.initOwner(owner); - stage.setTitle(resourceBundle.getString("health.title")); + stage.setTitle(String.format(resourceBundle.getString("health.title"), vault.getDisplayName())); stage.setResizable(true); stage.showingProperty().addListener(showingListener); // bind masterkey lifecycle to window return stage; diff --git a/src/main/java/org/cryptomator/ui/health/StartController.java b/src/main/java/org/cryptomator/ui/health/StartController.java index 93b04e5bb..90decad86 100644 --- a/src/main/java/org/cryptomator/ui/health/StartController.java +++ b/src/main/java/org/cryptomator/ui/health/StartController.java @@ -17,6 +17,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; +import javax.inject.Named; import javafx.application.Platform; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; @@ -34,6 +35,7 @@ public class StartController implements FxController { private static final Logger LOG = LoggerFactory.getLogger(StartController.class); private final Stage window; + private final Stage unlockWindow; private final ObjectProperty unverifiedVaultConfig; private final KeyLoadingStrategy keyLoadingStrategy; private final ExecutorService executor; @@ -43,9 +45,10 @@ public class StartController implements FxController { private final Lazy errorComponent; @Inject - public StartController(@HealthCheckWindow Stage window, HealthCheckComponent.LoadUnverifiedConfigResult configLoadResult, @HealthCheckWindow KeyLoadingStrategy keyLoadingStrategy, ExecutorService executor, AtomicReference masterkeyRef, AtomicReference vaultConfigRef, @FxmlScene(FxmlFile.HEALTH_CHECK_LIST) Lazy checkScene, Lazy errorComponent) { + public StartController(@HealthCheckWindow Stage window, HealthCheckComponent.LoadUnverifiedConfigResult configLoadResult, @HealthCheckWindow KeyLoadingStrategy keyLoadingStrategy, ExecutorService executor, AtomicReference masterkeyRef, AtomicReference vaultConfigRef, @FxmlScene(FxmlFile.HEALTH_CHECK_LIST) Lazy checkScene, Lazy errorComponent, @Named("unlockWindow") Stage unlockWindow) { Preconditions.checkNotNull(configLoadResult.config()); this.window = window; + this.unlockWindow = unlockWindow; this.unverifiedVaultConfig = new SimpleObjectProperty<>(configLoadResult.config()); this.keyLoadingStrategy = keyLoadingStrategy; this.executor = executor; @@ -98,6 +101,7 @@ public class StartController implements FxController { loadingKeyFailed(exception); } else { LOG.debug("Loaded valid key"); + unlockWindow.close(); window.setScene(checkScene.get()); } } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java index d1f80a40c..a35b108d9 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/GeneralVaultOptionsController.java @@ -110,6 +110,6 @@ public class GeneralVaultOptionsController implements FxController { } public void startHealthCheck() { - healthCheckWindow.vault(vault).build().showHealthCheckWindow(); + healthCheckWindow.vault(vault).owner(window).build().showHealthCheckWindow(); } } diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 3285e8da5..5c3e5d07e 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -147,7 +147,7 @@ migration.impossible.reason=The vault cannot be automatically migrated because i migration.impossible.moreInfo=The vault can still be opened with an older version. For instructions on how to manually migrate a vault, visit # Health Check -health.title=Vault Health Check +health.title=Health Check of \"%s\" health.start.configValid=Reading and parsing vault configuration file was successful. Proceed to select checks. health.start.configInvalid=Error while reading and parsing the vault configuration file. health.checkList.header=Available Health Checks