diff --git a/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java b/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java index 6694c21b4..eca371bbf 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java +++ b/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java @@ -53,6 +53,7 @@ public class ExitUtil { private final Localization localization; private final Settings settings; private final Optional macFunctions; + private TrayIcon trayIcon; @Inject public ExitUtil(@Named("mainWindow") Stage mainWindow, Localization localization, Settings settings, Optional macFunctions) { @@ -82,7 +83,7 @@ public class ExitUtil { } private void initTrayIconExitHandler(Runnable exitCommand) { - final TrayIcon trayIcon = createTrayIcon(exitCommand); + trayIcon = createTrayIcon(exitCommand); try { // double clicking tray icon should open Cryptomator if (SystemUtils.IS_OS_WINDOWS) { @@ -118,14 +119,7 @@ public class ExitUtil { exitItem.addActionListener(e -> exitCommand.run()); popup.add(exitItem); - final Image image; - if (SystemUtils.IS_OS_MAC_OSX && isMacMenuBarDarkMode()) { - image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tray_icon_mac_white.png")); - } else if (SystemUtils.IS_OS_MAC_OSX) { - image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tray_icon_mac_black.png")); - } else { - image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tray_icon.png")); - } + final Image image = getAppropriateTrayIconImage(true); return new TrayIcon(image, localization.getString("app.name"), popup); } @@ -202,4 +196,23 @@ public class ExitUtil { }); } + public void updateTrayIcon(boolean areAllVaultsLocked) { + if (trayIcon != null) { + Image image = getAppropriateTrayIconImage(areAllVaultsLocked); + trayIcon.setImage(image); + } + } + + private Image getAppropriateTrayIconImage(boolean areAllVaultsLocked) { + String resourceName; + if (SystemUtils.IS_OS_MAC_OSX && isMacMenuBarDarkMode()) { + resourceName = areAllVaultsLocked ? "/tray_icon_mac_white.png" : "/tray_icon_unlocked_mac_white.png"; + } else if (SystemUtils.IS_OS_MAC_OSX) { + resourceName = areAllVaultsLocked ? "/tray_icon_mac_black.png" : "/tray_icon_unlocked_mac_black.png"; + } else { + resourceName = areAllVaultsLocked ? "/tray_icon.png" : "/tray_icon_unlocked.png"; + } + return Toolkit.getDefaultToolkit().getImage(getClass().getResource(resourceName)); + } + } diff --git a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java index 9cb42f13d..33782e83c 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controllers/MainController.java @@ -125,6 +125,7 @@ public class MainController implements ViewController { this.upgradeStrategyForSelectedVault = EasyBind.monadic(selectedVault).map(upgradeStrategies::getUpgradeStrategy); this.areAllVaultsLocked = Bindings.isEmpty(FXCollections.observableList(vaults, Vault::observables).filtered(Vault.NOT_LOCKED)); + EasyBind.subscribe(areAllVaultsLocked, exitUtil::updateTrayIcon); EasyBind.subscribe(areAllVaultsLocked, Platform::setImplicitExit); autoUnlocker.unlockAllSilently(); diff --git a/main/ui/src/main/resources/tray_icon_unlocked.png b/main/ui/src/main/resources/tray_icon_unlocked.png new file mode 100644 index 000000000..fb516b24d Binary files /dev/null and b/main/ui/src/main/resources/tray_icon_unlocked.png differ diff --git a/main/ui/src/main/resources/tray_icon_unlocked_mac_black.png b/main/ui/src/main/resources/tray_icon_unlocked_mac_black.png new file mode 100644 index 000000000..1530566e0 Binary files /dev/null and b/main/ui/src/main/resources/tray_icon_unlocked_mac_black.png differ diff --git a/main/ui/src/main/resources/tray_icon_unlocked_mac_black@2x.png b/main/ui/src/main/resources/tray_icon_unlocked_mac_black@2x.png new file mode 100644 index 000000000..ae6058522 Binary files /dev/null and b/main/ui/src/main/resources/tray_icon_unlocked_mac_black@2x.png differ diff --git a/main/ui/src/main/resources/tray_icon_unlocked_mac_white.png b/main/ui/src/main/resources/tray_icon_unlocked_mac_white.png new file mode 100644 index 000000000..848d1a217 Binary files /dev/null and b/main/ui/src/main/resources/tray_icon_unlocked_mac_white.png differ diff --git a/main/ui/src/main/resources/tray_icon_unlocked_mac_white@2x.png b/main/ui/src/main/resources/tray_icon_unlocked_mac_white@2x.png new file mode 100644 index 000000000..6ea6bac4d Binary files /dev/null and b/main/ui/src/main/resources/tray_icon_unlocked_mac_white@2x.png differ