Parcourir la source

some minor fixes
- reset password field contents when changing a vault
- hide "change password" option for uninitialized or missing vaults

Sebastian Stenzel il y a 9 ans
Parent
commit
25ee0519e1

+ 7 - 0
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
 	// ****************************************

+ 6 - 0
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
 	// ****************************************

+ 10 - 4
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<AbstractFXMLViewController> activeController = new SimpleObjectProperty<>();
 	private final ObservableList<Vault> vaults;
 	private final ObjectProperty<Vault> selectedVault = new SimpleObjectProperty<>();
-	private final MonadicBinding<Boolean> isSelectedVaultUnlocked = EasyBind.select(selectedVault).selectObject(Vault::unlockedProperty);;
-	private final Binding<Boolean> 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<Vault, UnlockedController> 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);

+ 2 - 2
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;
 		}

+ 1 - 1
main/ui/src/main/resources/fxml/main.fxml

@@ -34,7 +34,7 @@
 				<MenuItem text="%main.directoryList.contextMenu.remove" onAction="#didClickRemoveSelectedEntry">
 					<graphic><Label text="&#xf12a;" styleClass="ionicons"/></graphic>
 				</MenuItem>
-				<MenuItem text="%main.directoryList.contextMenu.changePassword" onAction="#didClickChangePassword">
+				<MenuItem text="%main.directoryList.contextMenu.changePassword" fx:id="changePasswordMenuItem" onAction="#didClickChangePassword">
 					<graphic><Label text="&#xf2bf;" styleClass="ionicons"/></graphic>
 				</MenuItem>
 			</items>