From e78a064af61012ca0bf60b8b373572e462623004 Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Wed, 13 Aug 2025 11:40:10 +0200 Subject: [PATCH] dialogs with icons and some other ui improvements --- .../ChooseMasterkeyFileController.java | 3 +- .../RecoveryKeyExpertSettingsController.java | 2 +- .../RecoveryKeyOnboardingController.java | 88 +++++++------ .../convertvault_hubtopassword_convert.fxml | 46 ++++--- .../convertvault_hubtopassword_start.fxml | 38 +++--- .../fxml/recoverykey_expert_settings.fxml | 1 + .../fxml/recoverykey_onboarding.fxml | 119 +++++++++--------- .../resources/fxml/recoverykey_recover.fxml | 28 +++-- .../fxml/recoverykey_reset_password.fxml | 38 ++++-- .../resources/fxml/recoverykey_validate.fxml | 23 ++-- src/main/resources/i18n/strings.properties | 25 ++-- 11 files changed, 240 insertions(+), 171 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/ChooseMasterkeyFileController.java b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/ChooseMasterkeyFileController.java index 0ced00170..4e1c663e9 100644 --- a/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/ChooseMasterkeyFileController.java +++ b/src/main/java/org/cryptomator/ui/keyloading/masterkeyfile/ChooseMasterkeyFileController.java @@ -77,8 +77,9 @@ public class ChooseMasterkeyFileController implements FxController { @FXML void restoreMasterkey() { + Stage ownerStage = (Stage) window.getOwner(); window.close(); - recoveryKeyWindow.create(vault, window, new SimpleObjectProperty<>(RecoveryActionType.RESTORE_MASTERKEY)).showOnboardingDialogWindow(); + recoveryKeyWindow.create(vault, ownerStage, new SimpleObjectProperty<>(RecoveryActionType.RESTORE_MASTERKEY)).showOnboardingDialogWindow(); } @FXML diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyExpertSettingsController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyExpertSettingsController.java index f84529b1e..5e72b8969 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyExpertSettingsController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyExpertSettingsController.java @@ -27,7 +27,7 @@ public class RecoveryKeyExpertSettingsController implements FxController { public static final int MAX_SHORTENING_THRESHOLD = 220; public static final int MIN_SHORTENING_THRESHOLD = 36; - private static final String DOCS_NAME_SHORTENING_URL = "https://docs.cryptomator.org/security/architecture/#name-shortening"; + private static final String DOCS_NAME_SHORTENING_URL = "https://docs.cryptomator.org/security/vault/#name-shortening"; private final Stage window; private final Lazy application; diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyOnboardingController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyOnboardingController.java index 700c911f0..3c9017619 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyOnboardingController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyOnboardingController.java @@ -8,16 +8,19 @@ import org.cryptomator.ui.common.FxmlScene; import javax.inject.Inject; import javax.inject.Named; -import javafx.beans.property.BooleanProperty; +import javafx.beans.binding.Bindings; +import javafx.beans.binding.BooleanBinding; import javafx.beans.property.ObjectProperty; -import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; +import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.util.ResourceBundle; @@ -48,8 +51,10 @@ public class RecoveryKeyOnboardingController implements FxController { private Button nextButton; @FXML private VBox chooseMethodeBox; - private final ToggleGroup methodToggleGroup = new ToggleGroup(); - private final BooleanProperty showThirdText = new SimpleBooleanProperty(true); + @FXML + private ToggleGroup methodToggleGroup = new ToggleGroup(); + @FXML + private HBox hBox; @Inject public RecoveryKeyOnboardingController(@RecoveryKeyWindow Stage window, // @@ -68,38 +73,57 @@ public class RecoveryKeyOnboardingController implements FxController { @FXML public void initialize() { - recoveryKeyRadio.setToggleGroup(methodToggleGroup); passwordRadio.setToggleGroup(methodToggleGroup); - boolean showMethodSelection = (recoverType.get() == RecoveryActionType.RESTORE_VAULT_CONFIG); - chooseMethodeBox.setVisible(showMethodSelection); - chooseMethodeBox.setManaged(showMethodSelection); + BooleanBinding showMethodSelection = Bindings.createBooleanBinding( + () -> recoverType.get() == RecoveryActionType.RESTORE_VAULT_CONFIG, recoverType); + chooseMethodeBox.visibleProperty().bind(showMethodSelection); + chooseMethodeBox.managedProperty().bind(showMethodSelection); - nextButton.disableProperty().bind( // - affirmationBox.selectedProperty().not() // - .or(methodToggleGroup.selectedToggleProperty().isNull() // - .and(showMethodSelectionProperty()))); + nextButton.disableProperty().bind( + affirmationBox.selectedProperty().not() + .or(methodToggleGroup.selectedToggleProperty().isNull().and(showMethodSelection)) + ); switch (recoverType.get()) { - case RESTORE_VAULT_CONFIG -> { - window.setTitle(resourceBundle.getString("recoveryKey.recoverVaultConfig.title")); - messageLabel.setText(resourceBundle.getString("recoveryKey.recover.onBoarding.readThis")); - secondTextDesc.setText(resourceBundle.getString("recoveryKey.recover.onBoarding.recoverVaultConfig.intro2")); - showThirdText.set(false); - } - case RESTORE_MASTERKEY -> { - window.setTitle(resourceBundle.getString("recoveryKey.recoverMasterkey.title")); - messageLabel.setText(resourceBundle.getString("recoveryKey.recover.onBoarding.readThis")); - titleLabel.setText(resourceBundle.getString("recoveryKey.recoverMasterkey.title")); - secondTextDesc.setText(resourceBundle.getString("recoveryKey.recover.onBoarding.recoverMasterkey.intro2")); - showThirdText.set(false); - } + case RESTORE_MASTERKEY -> + window.setTitle(resourceBundle.getString("recoveryKey.recoverMasterkey.title")); + case RESTORE_ALL, RESTORE_VAULT_CONFIG -> + window.setTitle(resourceBundle.getString("recoveryKey.recoverVaultConfig.title")); + default -> window.setTitle(""); } - } - private BooleanProperty showMethodSelectionProperty() { - return new SimpleBooleanProperty(recoverType.get() == RecoveryActionType.RESTORE_VAULT_CONFIG); + messageLabel.textProperty().bind(Bindings.createStringBinding( + () -> resourceBundle.getString("recoveryKey.recover.onBoarding.readThis"), recoverType)); + + titleLabel.textProperty().bind(Bindings.createStringBinding(() -> + recoverType.get() == RecoveryActionType.RESTORE_MASTERKEY + ? resourceBundle.getString("recoveryKey.recoverMasterkey.title") + : resourceBundle.getString("recoveryKey.recoverVaultConfig.title"), recoverType)); + + BooleanBinding isMaster = Bindings.createBooleanBinding( + () -> recoverType.get() == RecoveryActionType.RESTORE_MASTERKEY, recoverType); + hBox.minHeightProperty().bind(Bindings.when(isMaster).then(206.0).otherwise(Region.USE_COMPUTED_SIZE)); + + secondTextDesc.textProperty().bind(Bindings.createStringBinding(() -> { + RecoveryActionType type = recoverType.get(); + Toggle sel = methodToggleGroup.getSelectedToggle(); + return switch (type) { + case RESTORE_VAULT_CONFIG -> resourceBundle.getString(sel == passwordRadio + ? "recoveryKey.recover.onBoarding.recoverVaultConfig.intro2.password" + : "recoveryKey.recover.onBoarding.recoverVaultConfig.intro2.recoveryKey"); + case RESTORE_MASTERKEY -> resourceBundle.getString("recoveryKey.recover.onBoarding.recoverMasterkey.intro2"); + case RESTORE_ALL -> resourceBundle.getString("recoveryKey.recover.onBoarding.recoverVaultConfig.intro2.recoveryKey"); + default -> ""; + }; + }, recoverType, methodToggleGroup.selectedToggleProperty())); + + showMethodSelection.addListener((_, _, nowShown) -> { + if (nowShown && methodToggleGroup.getSelectedToggle() == null) { + methodToggleGroup.selectToggle(recoveryKeyRadio); + } + }); } @FXML @@ -127,13 +151,5 @@ public class RecoveryKeyOnboardingController implements FxController { window.centerOnScreen(); } - public BooleanProperty showThirdTextProperty() { - return showThirdText; - } - - public boolean getShowThirdText() { - return showThirdText.get(); - } - } diff --git a/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml b/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml index 7ea190fd4..a5be0fc17 100644 --- a/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml +++ b/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml @@ -6,7 +6,12 @@ - + + + + + - + + + + + + + + + + + - + - - - - - - + + + + + + + - + diff --git a/src/main/resources/fxml/convertvault_hubtopassword_start.fxml b/src/main/resources/fxml/convertvault_hubtopassword_start.fxml index d5c0a5e0b..4cdf76fc4 100644 --- a/src/main/resources/fxml/convertvault_hubtopassword_start.fxml +++ b/src/main/resources/fxml/convertvault_hubtopassword_start.fxml @@ -5,29 +5,39 @@ - + + + + spacing="12"> - + + + + + + + + + + + - - - -