diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java index a8e5f31b8..e74e2d9a4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/ChangePasswordController.java @@ -101,6 +101,7 @@ public class ChangePasswordController extends LocalizedFXMLViewController { BooleanBinding oldPasswordIsEmpty = oldPasswordField.textProperty().isEmpty(); BooleanBinding newPasswordIsEmpty = newPasswordField.textProperty().isEmpty(); BooleanBinding passwordsDiffer = newPasswordField.textProperty().isNotEqualTo(retypePasswordField.textProperty()); + EasyBind.subscribe(vault, this::vaultDidChange); changePasswordButton.disableProperty().bind(oldPasswordIsEmpty.or(newPasswordIsEmpty.or(passwordsDiffer))); passwordStrength.bind(EasyBind.map(newPasswordField.textProperty(), strengthRater::computeRate)); @@ -117,6 +118,12 @@ public class ChangePasswordController extends LocalizedFXMLViewController { return getClass().getResource("/fxml/change_password.fxml"); } + private void vaultDidChange(Vault newVault) { + oldPasswordField.clear(); + newPasswordField.clear(); + retypePasswordField.clear(); + } + // **************************************** // Downloads link // **************************************** diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java index d4f42371b..6625423fe 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/InitializeController.java @@ -88,6 +88,7 @@ public class InitializeController extends LocalizedFXMLViewController { public void initialize() { BooleanBinding passwordIsEmpty = passwordField.textProperty().isEmpty(); BooleanBinding passwordsDiffer = passwordField.textProperty().isNotEqualTo(retypePasswordField.textProperty()); + EasyBind.subscribe(vault, this::vaultDidChange); okButton.disableProperty().bind(passwordIsEmpty.or(passwordsDiffer)); passwordStrength.bind(EasyBind.map(passwordField.textProperty(), strengthRater::computeRate)); @@ -104,6 +105,11 @@ public class InitializeController extends LocalizedFXMLViewController { return getClass().getResource("/fxml/initialize.fxml"); } + private void vaultDidChange(Vault newVault) { + passwordField.clear(); + retypePasswordField.clear(); + } + // **************************************** // OK button // **************************************** diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java index 223a7ef13..810da32eb 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java @@ -32,7 +32,6 @@ import org.cryptomator.ui.settings.Localization; import org.cryptomator.ui.settings.Settings; import org.cryptomator.ui.util.DialogBuilderUtil; import org.fxmisc.easybind.EasyBind; -import org.fxmisc.easybind.monadic.MonadicBinding; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +40,7 @@ import javafx.application.Platform; import javafx.beans.binding.Binding; import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; +import javafx.beans.binding.BooleanExpression; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; @@ -56,6 +56,7 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.ContextMenu; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; +import javafx.scene.control.MenuItem; import javafx.scene.control.ToggleButton; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; @@ -80,8 +81,9 @@ public class MainController extends LocalizedFXMLViewController { private final ObjectProperty activeController = new SimpleObjectProperty<>(); private final ObservableList vaults; private final ObjectProperty selectedVault = new SimpleObjectProperty<>(); - private final MonadicBinding isSelectedVaultUnlocked = EasyBind.select(selectedVault).selectObject(Vault::unlockedProperty);; - private final Binding canEditSelectedVault = EasyBind.combine(selectedVault.isNull(), isSelectedVaultUnlocked.orElse(false), Boolean::logicalOr); + private final BooleanExpression isSelectedVaultUnlocked = BooleanBinding.booleanExpression(EasyBind.select(selectedVault).selectObject(Vault::unlockedProperty).orElse(false)); + private final BooleanExpression isSelectedVaultValid = BooleanBinding.booleanExpression(EasyBind.monadic(selectedVault).map(Vault::isValidVaultDirectory).orElse(false)); + private final BooleanExpression canEditSelectedVault = selectedVault.isNotNull().and(isSelectedVaultUnlocked.not()); private final BooleanBinding isShowingSettings; private final Map unlockedVaults = new HashMap<>(); @@ -112,6 +114,9 @@ public class MainController extends LocalizedFXMLViewController { @FXML private ContextMenu vaultListCellContextMenu; + @FXML + private MenuItem changePasswordMenuItem; + @FXML private ContextMenu addVaultContextMenu; @@ -142,8 +147,9 @@ public class MainController extends LocalizedFXMLViewController { vaultList.setCellFactory(this::createDirecoryListCell); activeController.set(welcomeController.get()); selectedVault.bind(vaultList.getSelectionModel().selectedItemProperty()); - removeVaultButton.disableProperty().bind(canEditSelectedVault); + removeVaultButton.disableProperty().bind(canEditSelectedVault.not()); emptyListInstructions.visibleProperty().bind(Bindings.isEmpty(vaults)); + changePasswordMenuItem.visibleProperty().bind(isSelectedVaultValid); EasyBind.subscribe(selectedVault, this::selectedVaultDidChange); EasyBind.subscribe(activeController, this::activeControllerDidChange); diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java index 2844e24f4..1f34ae6f9 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/UnlockController.java @@ -119,7 +119,7 @@ public class UnlockController extends LocalizedFXMLViewController { } unlockButton.disableProperty().bind(passwordField.textProperty().isEmpty()); - EasyBind.subscribe(vault, this::vaultChanged); + EasyBind.subscribe(vault, this::vaultDidChange); } @Override @@ -127,7 +127,7 @@ public class UnlockController extends LocalizedFXMLViewController { return getClass().getResource("/fxml/unlock.fxml"); } - private void vaultChanged(Vault newVault) { + private void vaultDidChange(Vault newVault) { if (newVault == null) { return; } diff --git a/main/ui/src/main/resources/fxml/main.fxml b/main/ui/src/main/resources/fxml/main.fxml index 19e374c79..61f03c97e 100644 --- a/main/ui/src/main/resources/fxml/main.fxml +++ b/main/ui/src/main/resources/fxml/main.fxml @@ -34,7 +34,7 @@ - +