Ver Fonte

deduplicated code

Tobias Hagemann há 2 anos atrás
pai
commit
dda7255d8e

+ 11 - 64
src/main/java/org/cryptomator/ui/addvaultwizard/ChooseExistingVaultController.java

@@ -2,18 +2,13 @@ package org.cryptomator.ui.addvaultwizard;
 
 import dagger.Lazy;
 import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.common.LicenseHolder;
-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.integrations.uiappearance.UiAppearanceException;
-import org.cryptomator.integrations.uiappearance.UiAppearanceListener;
-import org.cryptomator.integrations.uiappearance.UiAppearanceProvider;
 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;
@@ -30,7 +25,6 @@ import javafx.stage.Stage;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
-import java.util.Optional;
 import java.util.ResourceBundle;
 
 import static org.cryptomator.common.Constants.CRYPTOMATOR_FILENAME_GLOB;
@@ -48,15 +42,12 @@ public class ChooseExistingVaultController implements FxController {
 	private final ObjectProperty<Vault> vault;
 	private final VaultListManager vaultListManager;
 	private final ResourceBundle resourceBundle;
-	private final Settings settings;
-	private final Optional<UiAppearanceProvider> appearanceProvider;
-	private final LicenseHolder licenseHolder;
-	private final UiAppearanceListener systemInterfaceThemeListener = this::systemInterfaceThemeChanged;
+	private final FxApplicationStyle applicationStyle;
 
 	private final ObjectProperty<Image> screenshot = new SimpleObjectProperty<>();
 
 	@Inject
-	ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows appWindows, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, Settings settings, Optional<UiAppearanceProvider> appearanceProvider, LicenseHolder licenseHolder) {
+	ChooseExistingVaultController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_WELCOME) Lazy<Scene> welcomeScene, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, FxApplicationWindows appWindows, ObjectProperty<Path> vaultPath, @AddVaultWizardWindow ObjectProperty<Vault> vault, VaultListManager vaultListManager, ResourceBundle resourceBundle, FxApplicationStyle applicationStyle) {
 		this.window = window;
 		this.welcomeScene = welcomeScene;
 		this.successScene = successScene;
@@ -65,74 +56,30 @@ public class ChooseExistingVaultController implements FxController {
 		this.vault = vault;
 		this.vaultListManager = vaultListManager;
 		this.resourceBundle = resourceBundle;
-		this.settings = settings;
-		this.appearanceProvider = appearanceProvider;
-		this.licenseHolder = licenseHolder;
+		this.applicationStyle = applicationStyle;
 	}
 
 	@FXML
 	public void initialize() {
 		if (SystemUtils.IS_OS_MAC) {
-			settings.theme().addListener(this::appThemeChanged);
-			setSelectedMacScreenshot(settings.theme().get());
+			applicationStyle.appliedThemeProperty().addListener(this::appliedThemeChanged);
+			setMacScreenshot(applicationStyle.appliedThemeProperty().get());
 		} else {
 			this.screenshot.set(new Image(getClass().getResource("/img/select-masterkey-win.png").toString()));
 		}
 	}
 
-	private void appThemeChanged(@SuppressWarnings("unused") ObservableValue<? extends UiTheme> observable, @SuppressWarnings("unused") UiTheme oldValue, UiTheme newValue) {
-		if (appearanceProvider.isPresent() && oldValue == UiTheme.AUTOMATIC && newValue != UiTheme.AUTOMATIC) {
-			try {
-				appearanceProvider.get().removeListener(systemInterfaceThemeListener);
-			} catch (UiAppearanceException e) {
-				LOG.error("Failed to disable automatic theme switching.");
-			}
-		}
-		setSelectedMacScreenshot(newValue);
-	}
-
-	private void setSelectedMacScreenshot(UiTheme desiredTheme) {
-		UiTheme theme = licenseHolder.isValidLicense() ? desiredTheme : UiTheme.LIGHT;
-		switch (theme) {
-			case LIGHT -> setLightMacScreenshot();
-			case DARK -> setDarkMacScreenshot();
-			case AUTOMATIC -> {
-				appearanceProvider.ifPresent(provider -> {
-					try {
-						provider.addListener(systemInterfaceThemeListener);
-					} catch (UiAppearanceException e) {
-						LOG.error("Failed to enable automatic theme switching.");
-					}
-				});
-				setSystemMacScreenshot();
-			}
-		}
+	private void appliedThemeChanged(@SuppressWarnings("unused") ObservableValue<? extends Theme> observable, @SuppressWarnings("unused") Theme oldValue, Theme newValue) {
+		setMacScreenshot(newValue);
 	}
 
-	private void systemInterfaceThemeChanged(Theme theme) {
+	private void setMacScreenshot(Theme theme) {
 		switch (theme) {
-			case LIGHT -> setLightMacScreenshot();
-			case DARK -> setDarkMacScreenshot();
+			case LIGHT -> this.screenshot.set(new Image(getClass().getResource("/img/select-masterkey-mac.png").toString()));
+			case DARK -> this.screenshot.set(new Image(getClass().getResource("/img/select-masterkey-mac-dark.png").toString()));
 		}
 	}
 
-	private void setSystemMacScreenshot() {
-		if (appearanceProvider.isPresent()) {
-			systemInterfaceThemeChanged(appearanceProvider.get().getSystemTheme());
-		} else {
-			LOG.warn("No UiAppearanceProvider present, assuming LIGHT theme...");
-			setLightMacScreenshot();
-		}
-	}
-
-	private void setLightMacScreenshot() {
-		this.screenshot.set(new Image(getClass().getResource("/img/select-masterkey-mac.png").toString()));
-	}
-
-	private void setDarkMacScreenshot() {
-		this.screenshot.set(new Image(getClass().getResource("/img/select-masterkey-mac-dark.png").toString()));
-	}
-
 	@FXML
 	public void back() {
 		window.setScene(welcomeScene.get());

+ 10 - 1
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<UiAppearanceProvider> appearanceProvider;
 	private final LicenseHolder licenseHolder;
 	private final UiAppearanceListener systemInterfaceThemeListener = this::systemInterfaceThemeChanged;
+	private final ObjectProperty<Theme> appliedTheme = new SimpleObjectProperty<>(Theme.LIGHT);
 
 	@Inject
-	public FxApplicationStyle(Settings settings, Optional<UiAppearanceProvider> appearanceProvider, LicenseHolder licenseHolder){
+	public FxApplicationStyle(Settings settings, Optional<UiAppearanceProvider> 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<Theme> appliedThemeProperty() {
+		return appliedTheme;
+	}
 }