diff --git a/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java index 229487cb6..71fdd8d3b 100644 --- a/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/VolumePreferencesController.java @@ -15,6 +15,8 @@ import javafx.scene.control.ChoiceBox; import javafx.scene.control.TextField; import javafx.util.StringConverter; import java.util.List; +import java.util.Optional; +import java.util.ResourceBundle; /** * TODO: if WebDAV is selected under Windows, show warning that specific mount options (like selecting a directory as mount point) are _not_ supported @@ -24,6 +26,7 @@ public class VolumePreferencesController implements FxController { private final Settings settings; private final ObservableValue selectedMountService; + private final ResourceBundle resourceBundle; private final BooleanExpression loopbackPortSupported; private final ObservableValue mountToDirSupported; private final ObservableValue mountToDriveLetterSupported; @@ -35,10 +38,11 @@ public class VolumePreferencesController implements FxController { public Button loopbackPortApplyButton; @Inject - VolumePreferencesController(Settings settings, List mountProviders, ObservableValue actualMountService) { + VolumePreferencesController(Settings settings, List mountProviders, ObservableValue actualMountService, ResourceBundle resourceBundle) { this.settings = settings; this.mountProviders = mountProviders; this.selectedMountService = actualMountService; + this.resourceBundle = resourceBundle; this.loopbackPortSupported = BooleanExpression.booleanExpression(selectedMountService.map(as -> as.service().hasCapability(MountCapability.LOOPBACK_PORT))); this.mountToDirSupported = selectedMountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_WITHIN_EXISTING_PARENT) || as.service().hasCapability(MountCapability.MOUNT_TO_EXISTING_DIR)); this.mountToDriveLetterSupported = selectedMountService.map(as -> as.service().hasCapability(MountCapability.MOUNT_AS_DRIVE_LETTER)); @@ -47,10 +51,15 @@ public class VolumePreferencesController implements FxController { } public void initialize() { + volumeTypeChoiceBox.getItems().add(null); volumeTypeChoiceBox.getItems().addAll(mountProviders); volumeTypeChoiceBox.setConverter(new MountServiceConverter()); - volumeTypeChoiceBox.getSelectionModel().select(selectedMountService.getValue().service()); - volumeTypeChoiceBox.valueProperty().addListener((observableValue, oldProvide, newProvider) -> settings.mountService().set(newProvider.getClass().getName())); + boolean autoSelected = settings.mountService().get() == null; + volumeTypeChoiceBox.getSelectionModel().select(autoSelected ? null : selectedMountService.getValue().service()); + volumeTypeChoiceBox.valueProperty().addListener((observableValue, oldProvider, newProvider) -> { + var toSet = Optional.ofNullable(newProvider).map(nP -> nP.getClass().getName()).orElse(null); + settings.mountService().set(toSet); + }); loopbackPortField.setText(String.valueOf(settings.port().get())); loopbackPortApplyButton.visibleProperty().bind(settings.port().asString().isNotEqualTo(loopbackPortField.textProperty())); @@ -117,11 +126,15 @@ public class VolumePreferencesController implements FxController { /* Helpers */ - private static class MountServiceConverter extends StringConverter { + private class MountServiceConverter extends StringConverter { @Override public String toString(MountService provider) { - return provider.displayName(); + if (provider == null) { + return resourceBundle.getString("generic.choicebox.autoSelection"); + } else { + return provider.displayName(); + } } @Override diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 8e870baff..07319a63e 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -14,6 +14,8 @@ generic.button.copied=Copied! generic.button.done=Done generic.button.next=Next generic.button.print=Print +## Selection +generic.choicebox.autoSelection=Automatic # Error error.message=An error occurred @@ -278,7 +280,7 @@ preferences.interface.showTrayIcon=Show tray icon (requires restart) preferences.volume=Virtual Drive preferences.volume.type=Volume Type preferences.volume.tcp.port=TCP Port -preferences.volume.supportedFeatures=This volume type supports the following features: +preferences.volume.supportedFeatures=The chosen volume type supports the following features: preferences.volume.feature.mountToDir=Custom directory as mount point preferences.volume.feature.mountToDriveLetter=Drive letter as mount point preferences.volume.feature.mountFlags=Custom mount options