From e5e606f3aef11ece17bb5c0b756f99ee9bcf2c4a Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sun, 16 Oct 2022 17:33:44 +1100 Subject: [PATCH 1/8] refresh vault list on tray icon click (#2383) --- .../ui/traymenu/TrayMenuBuilder.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java index ea7358770..eed41e318 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java +++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java @@ -3,6 +3,7 @@ package org.cryptomator.ui.traymenu; import com.google.common.base.Preconditions; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.vaults.Vault; +import org.cryptomator.common.vaults.VaultListManager; import org.cryptomator.integrations.tray.ActionItem; import org.cryptomator.integrations.tray.SeparatorItem; import org.cryptomator.integrations.tray.SubMenuItem; @@ -20,6 +21,10 @@ import javax.inject.Inject; import javafx.application.Platform; import javafx.beans.Observable; import javafx.collections.ObservableList; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.IOException; import java.io.UncheckedIOException; import java.util.ArrayList; @@ -63,6 +68,36 @@ public class TrayMenuBuilder { try (var image = getClass().getResourceAsStream(SystemUtils.IS_OS_MAC_OSX ? TRAY_ICON_MAC : TRAY_ICON)) { trayMenu.showTrayIcon(image.readAllBytes(), this::showMainWindow, "Cryptomator"); + SystemTray tray = SystemTray.getSystemTray(); + TrayIcon trayIcon = tray.getTrayIcons()[0]; + trayIcon.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + for (Vault vault : vaults) { + VaultListManager.redetermineVaultState(vault); + } + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + }); rebuildMenu(); initialized = true; } catch (IOException e) { From f852ae039237727e9398f301b85e5c65ac683cf9 Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sun, 16 Oct 2022 22:26:30 +1100 Subject: [PATCH 2/8] remove AWT code and relocate to TrayMenuController --- pom.xml | 2 +- .../ui/traymenu/AwtTrayMenuController.java | 15 ++++++++++ .../ui/traymenu/TrayMenuBuilder.java | 29 ++----------------- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index 20a4ffab2..c56af2617 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 2.1.0-rc1 2.4.4 - 1.1.0 + 1.1.1 1.1.2 1.1.2 1.1.0 diff --git a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java index 79f1dd628..2d0699064 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java +++ b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java @@ -19,6 +19,8 @@ import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.List; @CheckAvailability @@ -58,6 +60,19 @@ public class AwtTrayMenuController implements TrayMenuController { addChildren(menu, items); } + + @Override + public void onBeforeShow(Runnable listener) { + SystemTray systemTray = SystemTray.getSystemTray(); + TrayIcon trayIcon = systemTray.getTrayIcons()[0]; + trayIcon.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + listener.run(); + } + }); + } + private void addChildren(Menu menu, List items) { for (var item : items) { // TODO: use Pattern Matching for switch, once available diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java index eed41e318..83dca0370 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java +++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java @@ -70,32 +70,9 @@ public class TrayMenuBuilder { trayMenu.showTrayIcon(image.readAllBytes(), this::showMainWindow, "Cryptomator"); SystemTray tray = SystemTray.getSystemTray(); TrayIcon trayIcon = tray.getTrayIcons()[0]; - trayIcon.addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - for (Vault vault : vaults) { - VaultListManager.redetermineVaultState(vault); - } - } - - @Override - public void mousePressed(MouseEvent e) { - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - + trayMenu.onBeforeShow(() -> { + for (Vault vault : vaults) { + VaultListManager.redetermineVaultState(vault); } }); rebuildMenu(); From 445be3b668ca29368e6f8a71e9c5fbb63c91ad2b Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sun, 16 Oct 2022 22:36:25 +1100 Subject: [PATCH 3/8] remove straggling lines of awt code --- src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java index 83dca0370..358e76ed4 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java +++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java @@ -68,8 +68,6 @@ public class TrayMenuBuilder { try (var image = getClass().getResourceAsStream(SystemUtils.IS_OS_MAC_OSX ? TRAY_ICON_MAC : TRAY_ICON)) { trayMenu.showTrayIcon(image.readAllBytes(), this::showMainWindow, "Cryptomator"); - SystemTray tray = SystemTray.getSystemTray(); - TrayIcon trayIcon = tray.getTrayIcons()[0]; trayMenu.onBeforeShow(() -> { for (Vault vault : vaults) { VaultListManager.redetermineVaultState(vault); From dc310c009f5a820f50acba2b922347f4091e6b30 Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Tue, 1 Nov 2022 22:14:29 +1100 Subject: [PATCH 4/8] rename to onBeforeOpenMenu and init local reference in showTrayIcon() --- pom.xml | 2 +- .../ui/traymenu/AwtTrayMenuController.java | 24 +++++++++++-------- .../ui/traymenu/TrayMenuBuilder.java | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index c56af2617..fa598e5d9 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 2.1.0-rc1 2.4.4 - 1.1.1 + 1.2.0 1.1.2 1.1.2 1.1.0 diff --git a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java index 2d0699064..e8fbc570e 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java +++ b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java @@ -30,6 +30,7 @@ public class AwtTrayMenuController implements TrayMenuController { private static final Logger LOG = LoggerFactory.getLogger(AwtTrayMenuController.class); private final PopupMenu menu = new PopupMenu(); + private TrayIcon trayIcon; @CheckAvailability public static boolean isAvailable() { @@ -39,7 +40,7 @@ public class AwtTrayMenuController implements TrayMenuController { @Override public void showTrayIcon(byte[] rawImageData, Runnable defaultAction, String tooltip) throws TrayMenuException { var image = Toolkit.getDefaultToolkit().createImage(rawImageData); - var trayIcon = new TrayIcon(image, tooltip, menu); + trayIcon = new TrayIcon(image, tooltip, menu); trayIcon.setImageAutoSize(true); if (SystemUtils.IS_OS_WINDOWS) { @@ -62,15 +63,18 @@ public class AwtTrayMenuController implements TrayMenuController { @Override - public void onBeforeShow(Runnable listener) { - SystemTray systemTray = SystemTray.getSystemTray(); - TrayIcon trayIcon = systemTray.getTrayIcons()[0]; - trayIcon.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - listener.run(); - } - }); + public void onBeforeOpenMenu(Runnable listener) { + try { + this.trayIcon.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + listener.run(); + } + }); + } catch (Exception e) { + throw new IllegalStateException("Tray icon not found.", e); + } + } private void addChildren(Menu menu, List items) { diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java index 358e76ed4..fc7c344fd 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java +++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java @@ -68,7 +68,7 @@ public class TrayMenuBuilder { try (var image = getClass().getResourceAsStream(SystemUtils.IS_OS_MAC_OSX ? TRAY_ICON_MAC : TRAY_ICON)) { trayMenu.showTrayIcon(image.readAllBytes(), this::showMainWindow, "Cryptomator"); - trayMenu.onBeforeShow(() -> { + trayMenu.onBeforeOpenMenu(() -> { for (Vault vault : vaults) { VaultListManager.redetermineVaultState(vault); } From 1486826883ade9eb34dc324af163e4c9717b64d5 Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sat, 12 Nov 2022 22:19:22 +1100 Subject: [PATCH 5/8] remove unused imports --- .../java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java index fc7c344fd..e96446143 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java +++ b/src/main/java/org/cryptomator/ui/traymenu/TrayMenuBuilder.java @@ -21,10 +21,6 @@ import javax.inject.Inject; import javafx.application.Platform; import javafx.beans.Observable; import javafx.collections.ObservableList; -import java.awt.SystemTray; -import java.awt.TrayIcon; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.io.IOException; import java.io.UncheckedIOException; import java.util.ArrayList; From 1414ab4681fd9f2725da0a0beb6667cf5a741b88 Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sat, 12 Nov 2022 22:26:08 +1100 Subject: [PATCH 6/8] use preconditions instead of try...catch --- .../ui/traymenu/AwtTrayMenuController.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java index e8fbc570e..4b6a96bca 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java +++ b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java @@ -1,5 +1,6 @@ package org.cryptomator.ui.traymenu; +import dagger.internal.Preconditions; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.integrations.common.CheckAvailability; import org.cryptomator.integrations.common.Priority; @@ -64,17 +65,13 @@ public class AwtTrayMenuController implements TrayMenuController { @Override public void onBeforeOpenMenu(Runnable listener) { - try { - this.trayIcon.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - listener.run(); - } - }); - } catch (Exception e) { - throw new IllegalStateException("Tray icon not found.", e); - } - + Preconditions.checkNotNull(this.trayIcon); + this.trayIcon.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + listener.run(); + } + }); } private void addChildren(Menu menu, List items) { From d8ed9f854ad94f41fe536d1582e96d7508e22dd4 Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sun, 13 Nov 2022 11:42:41 +1100 Subject: [PATCH 7/8] update pom.xml for integrations-api 1.2.0-beta1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fa598e5d9..39ede10a8 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 2.1.0-rc1 2.4.4 - 1.2.0 + 1.2.0-beta1 1.1.2 1.1.2 1.1.0 From 759c21e5cf44f00ded62d563bd15ec2a4ef6979b Mon Sep 17 00:00:00 2001 From: Edward Chow Date: Sun, 13 Nov 2022 11:43:05 +1100 Subject: [PATCH 8/8] fix preconditions import --- .../java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java index 4b6a96bca..c82cea239 100644 --- a/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java +++ b/src/main/java/org/cryptomator/ui/traymenu/AwtTrayMenuController.java @@ -1,6 +1,6 @@ package org.cryptomator.ui.traymenu; -import dagger.internal.Preconditions; +import com.google.common.base.Preconditions; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.integrations.common.CheckAvailability; import org.cryptomator.integrations.common.Priority;