From 1924a7dec980aefb44da4f220d15ffd06e479030 Mon Sep 17 00:00:00 2001 From: jellemdekker Date: Fri, 6 Jul 2018 17:34:39 +0200 Subject: [PATCH] Implemented that a different system tray icon is shown to indicate when one or more vaults are unlocked. The unlocked icons are placeholders and will updated visually in following commits. --- .../java/org/cryptomator/ui/ExitUtil.java | 31 +++++++++++++----- .../ui/controllers/MainController.java | 1 + .../src/main/resources/tray_icon_unlocked.png | Bin 0 -> 588 bytes .../tray_icon_unlocked_mac_black.png | Bin 0 -> 350 bytes .../tray_icon_unlocked_mac_black@2x.png | Bin 0 -> 692 bytes .../tray_icon_unlocked_mac_white.png | Bin 0 -> 359 bytes .../tray_icon_unlocked_mac_white@2x.png | Bin 0 -> 707 bytes 7 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 main/ui/src/main/resources/tray_icon_unlocked.png create mode 100644 main/ui/src/main/resources/tray_icon_unlocked_mac_black.png create mode 100644 main/ui/src/main/resources/tray_icon_unlocked_mac_black@2x.png create mode 100644 main/ui/src/main/resources/tray_icon_unlocked_mac_white.png create mode 100644 main/ui/src/main/resources/tray_icon_unlocked_mac_white@2x.png 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..3106692db 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 0000000000000000000000000000000000000000..766b601e0f2bed50cec9e8a188d0a43063f34484 GIT binary patch literal 588 zcmV-S0<-;zP)(v_l+)nd#_QsTrGZC5bM-o6W6N?1ZEwoOnR8Y9&lYd@A)Nxz+h+)>(udO zr!jt*x|BoTz6zEeC5U(F^h#>ABz;%VGB3Y+pk13bmT+i}hh-iG+O~Oa3_D(#BF>kN zSoFESHTT#Y4lXB#*e?atZsmw^V_tOV-ShIIWec!&-72hFvjQtuF9$s@U$q3C`t-U& z46$DcgeIfA$H0D1Y~k?jL7Vb1VVe%NNcfb&?>jqXyBz~Ir^6Zv-6MwBPX$!{8liS= zj!A6RLu{AMd-m<$g#8CL!xjx+;H!Ue|A8%__qIK{9U+ET%6t&0U9LWS&tLLzOt|e3 z_v$`N1z5Jb58Pb%oR?$HE#2K4{g+C?3^eT`hFG=R)%$}WQ!F{cS9N=lQrV~6pjaHA zmiTJoRujf8Y4>!(lFrX2u6M#cq9p`2*=nBYNi1bP2+{#4D^p@786UEuO?EuKsX{-CVNC@a%JV=_uo@0tB$?@o+c0s_z#Qe aFV5H6Esm(f+NUM}0000}$90l-S?djIG&80S{YN~C8Yi!$D;_D9>ykR+2=REiu{x|GaAS^7$ZokA{G09Pi z+vgXkRBo!(;I`3;x9S;gC+*7Fpqz=C77&a?1*fSTJ}s;q)f-R#p$TjlwbyIK!CAcPmZ zXk}KxG)&91m0s|I5FXGi*SaX2H^Dl)vkJyyY^LqD)&%E;i>}orE0XmCa5}5t6}*~h zr@;qOzvZBkKHd%XWfgpbZ!&EkxF?k=aun5t&@>y2&yMHYc)LYu8V}|qXH8K?!7)|g zF(9u(2Ria*0FMb(#}u@%+)Zw=!7f7qoM@@ycHG{goCGk`E*sq9Cd&cf(=>!T6aWlS z7u|-sApi>QNE7lY0CR<-*0@j83GDTqs>`C+P`3*wG~H*7qrzN(Q^FJ!)bzu3ic akL5>l4yi-Q3~8PK0000sGqh(+>bY^(sxhm`fL6i)M!e}B^hag;?@=o%*FV}yC$DPQYdS^SI8x&diMH_pI8jes?T-U=)zc~9qi72Q z0rRpwOAU-7a{Z+YV zHZ#6-ZPWBoW;veF(GJRdsbIM;mD$Ho`>ODD>B#mvdKAl*=@X4}GvGnnYTmXg05?Zt zbhHp~yInMI7qeP5ND*=^uXwgF}O4m0YStkP?w}I5>&iA?01|A2T9F21$c+ykW zlbRM`n$&up^dz`38sl_}vCuf1+Cyq&gppEv*u*#svDoR+5bFXyh$6>JJs;r(spE4K zg7soW$^lnLk$t3oi135dK2hWvKzaO`4r)Om8z9Cg$a^!woAL_AM3MOlphkyCY3FcN zxGOU0BdCl}N&1?MyHMqD?IO?G&UJw;?51C2!qM_Bjc}>FVuu~XEQpL_F*!mz zHM&H2Tg$y2p|cw8B22=uk#QzjEWK@(P8MmoMLL@0tt_@UD>4o&twc{*)j)aYs*