diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java index 432007c99..fe4ac3bd1 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java @@ -2,19 +2,20 @@ package org.cryptomator.ui.addvaultwizard; import dagger.Lazy; import org.apache.commons.lang3.SystemUtils; -import org.cryptomator.common.settings.Settings; -import org.cryptomator.common.settings.UiTheme; import org.cryptomator.common.vaults.Vault; import org.cryptomator.common.vaults.VaultListManager; +import org.cryptomator.integrations.uiappearance.Theme; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import org.cryptomator.ui.fxapp.FxApplicationStyle; import org.cryptomator.ui.fxapp.FxApplicationWindows; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javafx.beans.property.ObjectProperty; +import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.scene.Scene; import javafx.scene.image.Image; @@ -23,6 +24,7 @@ import javafx.stage.Stage; import java.io.File; import java.io.IOException; import java.nio.file.Path; +import java.util.Objects; import java.util.ResourceBundle; import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB; @@ -40,12 +42,10 @@ public class ChooseExistingVaultController implements FxController { private final ObjectProperty vault; private final VaultListManager vaultListManager; private final ResourceBundle resourceBundle; - private final Settings settings; - - private Image screenshot; + private final ObservableValue screenshot; @Inject - ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy successScene, FxApplicationWindows appWindows, ObjectProperty vaultPath, @AddVaultWizardWindow ObjectProperty vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, Settings settings) { + ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy successScene, FxApplicationWindows appWindows, ObjectProperty vaultPath, @AddVaultWizardWindow ObjectProperty vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, FxApplicationStyle applicationStyle) { this.window = window; this.welcomeScene = welcomeScene; this.successScene = successScene; @@ -54,16 +54,20 @@ public class ChooseExistingVaultController implements FxController { this.vault = vault; this.vaultListManager = vaultListManager; this.resourceBundle = resourceBundle; - this.settings = settings; + this.screenshot = applicationStyle.appliedThemeProperty().map(this::selectScreenshot); } - @FXML - public void initialize() { + private Image selectScreenshot(Theme theme) { + String imageResourcePath; if (SystemUtils.IS_OS_MAC) { - this.screenshot = new Image(getClass().getResource("/img/select-masterkey-mac"+(UiTheme.LIGHT == settings.theme().get()? "":"-dark")+".png").toString()); + imageResourcePath = switch (theme) { + case LIGHT -> "/img/select-masterkey-mac.png"; + case DARK -> "/img/select-masterkey-mac-dark.png"; + }; } else { - this.screenshot = new Image(getClass().getResource("/img/select-masterkey-win.png").toString()); + imageResourcePath = "/img/select-masterkey-win.png"; } + return new Image((Objects.requireNonNull(getClass().getResource(imageResourcePath)).toString())); } @FXML @@ -92,8 +96,13 @@ public class ChooseExistingVaultController implements FxController { /* Getter */ - public Image getScreenshot() { + public ObservableValue screenshotProperty() { return screenshot; } + public Image getScreenshot() { + return screenshot.getValue(); + } + + } diff --git a/src/main/java/org/cryptomator/ui/fxapp/FxApplicationStyle.java b/src/main/java/org/cryptomator/ui/fxapp/FxApplicationStyle.java index 711da7948..b6681f728 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/FxApplicationStyle.java +++ b/src/main/java/org/cryptomator/ui/fxapp/FxApplicationStyle.java @@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javafx.application.Application; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; import java.util.Optional; @@ -24,9 +26,10 @@ public class FxApplicationStyle { private final Optional appearanceProvider; private final LicenseHolder licenseHolder; private final UiAppearanceListener systemInterfaceThemeListener = this::systemInterfaceThemeChanged; + private final ObjectProperty appliedTheme = new SimpleObjectProperty<>(Theme.LIGHT); @Inject - public FxApplicationStyle(Settings settings, Optional appearanceProvider, LicenseHolder licenseHolder){ + public FxApplicationStyle(Settings settings, Optional appearanceProvider, LicenseHolder licenseHolder) { this.settings = settings; this.appearanceProvider = appearanceProvider; this.licenseHolder = licenseHolder; @@ -91,6 +94,7 @@ public class FxApplicationStyle { } else { Application.setUserAgentStylesheet(stylesheet.toString()); appearanceProvider.ifPresent(provider -> provider.adjustToTheme(Theme.LIGHT)); + appliedTheme.set(Theme.LIGHT); } } @@ -103,6 +107,11 @@ public class FxApplicationStyle { } else { Application.setUserAgentStylesheet(stylesheet.toString()); appearanceProvider.ifPresent(provider -> provider.adjustToTheme(Theme.DARK)); + appliedTheme.set(Theme.DARK); } } + + public ObjectProperty appliedThemeProperty() { + return appliedTheme; + } }