From ca07644bd089be1ac38d434633119537780b3614 Mon Sep 17 00:00:00 2001 From: triosi Date: Thu, 20 Feb 2025 14:30:56 +0300 Subject: [PATCH] auto dark mode (only mac) --- .../sparrowwallet/sparrow/AppController.java | 32 ++++++++++++++++--- .../java/com/sparrowwallet/sparrow/Theme.java | 2 +- .../com/sparrowwallet/sparrow/app.fxml | 5 +++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 53c8cc8f..69aa0c5c 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -369,8 +369,8 @@ public class AppController implements Initializable { Theme configTheme = Config.get().getTheme(); if(configTheme == null) { - configTheme = Theme.LIGHT; - Config.get().setTheme(Theme.LIGHT); + configTheme = Theme.SYSTEM_DEFAULT; + Config.get().setTheme(Theme.SYSTEM_DEFAULT); } final Theme selectedTheme = configTheme; Optional selectedThemeToggle = theme.getToggles().stream().filter(toggle -> selectedTheme.equals(toggle.getUserData())).findFirst(); @@ -2339,11 +2339,35 @@ public class AppController implements Initializable { public void setTheme(ActionEvent event) { Theme selectedTheme = (Theme)theme.getSelectedToggle().getUserData(); - if(Config.get().getTheme() != selectedTheme) { + Theme themeToApply = selectedTheme; + if (selectedTheme == Theme.SYSTEM_DEFAULT) { + themeToApply = detectSystemTheme(); + } + + if (Config.get().getTheme() != selectedTheme) { Config.get().setTheme(selectedTheme); } - EventManager.get().post(new ThemeChangedEvent(selectedTheme)); + EventManager.get().post(new ThemeChangedEvent(themeToApply)); + } + + private Theme detectSystemTheme() { + String os = System.getProperty("os.name").toLowerCase(); + if (os.contains("mac")) { + return isMacDarkMode() ? Theme.DARK : Theme.LIGHT; + } + return Theme.LIGHT; + } + + private boolean isMacDarkMode() { + try (BufferedReader reader = new BufferedReader( + new InputStreamReader( + new ProcessBuilder("defaults", "read", "-g", "AppleInterfaceStyle").start().getInputStream()))) { + String result = reader.readLine(); + return result != null && result.trim().equalsIgnoreCase("Dark"); + } catch (IOException e) { + return false; + } } private void serverToggleStartAnimation() { diff --git a/src/main/java/com/sparrowwallet/sparrow/Theme.java b/src/main/java/com/sparrowwallet/sparrow/Theme.java index ee84ef92..94a5ac99 100644 --- a/src/main/java/com/sparrowwallet/sparrow/Theme.java +++ b/src/main/java/com/sparrowwallet/sparrow/Theme.java @@ -1,5 +1,5 @@ package com.sparrowwallet.sparrow; public enum Theme { - LIGHT, DARK + SYSTEM_DEFAULT, LIGHT, DARK } diff --git a/src/main/resources/com/sparrowwallet/sparrow/app.fxml b/src/main/resources/com/sparrowwallet/sparrow/app.fxml index c8d461c6..7193b295 100644 --- a/src/main/resources/com/sparrowwallet/sparrow/app.fxml +++ b/src/main/resources/com/sparrowwallet/sparrow/app.fxml @@ -101,6 +101,11 @@ + + + + +