diff --git a/main/commons/pom.xml b/main/commons/pom.xml
index f76e413c0..cbb970d2d 100644
--- a/main/commons/pom.xml
+++ b/main/commons/pom.xml
@@ -27,7 +27,11 @@
org.cryptomator
webdav-nio-adapter
-
+
+ org.cryptomator
+ jni
+
+
org.openjfx
diff --git a/main/commons/src/main/java/org/cryptomator/common/JniModule.java b/main/commons/src/main/java/org/cryptomator/common/JniModule.java
new file mode 100644
index 000000000..742514bfc
--- /dev/null
+++ b/main/commons/src/main/java/org/cryptomator/common/JniModule.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Skymatic GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the accompanying LICENSE file.
+ *******************************************************************************/
+package org.cryptomator.common;
+
+import dagger.Module;
+import dagger.Provides;
+import org.cryptomator.jni.JniFunctions;
+import org.cryptomator.jni.MacFunctions;
+import org.cryptomator.jni.WinFunctions;
+
+import java.util.Optional;
+
+@Module
+public class JniModule {
+
+ @Provides
+ Optional provideOptionalMacFunctions() {
+ return JniFunctions.macFunctions();
+ }
+
+ @Provides
+ Optional provideOptionalWinFunctions() {
+ return JniFunctions.winFunctions();
+ }
+
+}
diff --git a/main/keychain/pom.xml b/main/keychain/pom.xml
index 01e276cc9..4b454f8be 100644
--- a/main/keychain/pom.xml
+++ b/main/keychain/pom.xml
@@ -23,11 +23,7 @@
com.google.code.gson
gson
-
- org.cryptomator
- jni
-
-
+
com.google.guava
diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
index 90b975b7d..fd622e299 100644
--- a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
+++ b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainModule.java
@@ -5,30 +5,18 @@
*******************************************************************************/
package org.cryptomator.keychain;
-import java.util.Optional;
-import java.util.Set;
-
import com.google.common.collect.Sets;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.ElementsIntoSet;
-import org.cryptomator.jni.JniFunctions;
-import org.cryptomator.jni.MacFunctions;
-import org.cryptomator.jni.WinFunctions;
+import org.cryptomator.common.JniModule;
-@Module
+import java.util.Optional;
+import java.util.Set;
+
+@Module(includes = {JniModule.class})
public class KeychainModule {
- @Provides
- Optional provideOptionalMacFunctions() {
- return JniFunctions.macFunctions();
- }
-
- @Provides
- Optional provideOptionalWinFunctions() {
- return JniFunctions.winFunctions();
- }
-
@Provides
@ElementsIntoSet
Set provideKeychainAccessStrategies(MacSystemKeychainAccess macKeychain, WindowsProtectedKeychainAccess winKeychain, LinuxSecretServiceKeychainAccess linKeychain) {
diff --git a/main/pom.xml b/main/pom.xml
index 3e08109a5..279e9cb07 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -26,7 +26,7 @@
1.2.1
1.8.7
- 2.1.0
+ 2.2.0-SNAPSHOT
1.2.0
1.1.11
1.0.10
diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayIconController.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayIconController.java
index 905d6235b..ded374e8c 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayIconController.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayIconController.java
@@ -1,8 +1,7 @@
package org.cryptomator.ui.traymenu;
-import javafx.beans.Observable;
import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.common.settings.Settings;
+import org.cryptomator.jni.MacFunctions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -10,30 +9,28 @@ import javax.inject.Inject;
import java.awt.AWTException;
import java.awt.SystemTray;
import java.awt.TrayIcon;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
+import java.util.Optional;
@TrayMenuScoped
public class TrayIconController {
private static final Logger LOG = LoggerFactory.getLogger(TrayIconController.class);
- private final Settings settings;
private final TrayImageFactory imageFactory;
private final TrayMenuController trayMenuController;
private final TrayIcon trayIcon;
+ private final Optional macFunctions;
@Inject
- TrayIconController(Settings settings, TrayImageFactory imageFactory, TrayMenuController trayMenuController) {
- this.settings = settings;
+ TrayIconController(TrayImageFactory imageFactory, TrayMenuController trayMenuController, Optional macFunctions) {
this.trayMenuController = trayMenuController;
this.imageFactory = imageFactory;
this.trayIcon = new TrayIcon(imageFactory.loadImage(), "Cryptomator", trayMenuController.getMenu());
+ this.macFunctions = macFunctions;
}
public void initializeTrayIcon() {
- settings.theme().addListener(this::themeChanged);
+ macFunctions.map(MacFunctions::uiAppearance).ifPresent(uiAppearance -> uiAppearance.addListener(this::macInterfaceThemeChanged));
if (SystemUtils.IS_OS_WINDOWS) {
// TODO: test on windows: is this a double click?
@@ -50,7 +47,7 @@ public class TrayIconController {
trayMenuController.initTrayMenu();
}
- private void themeChanged(@SuppressWarnings("unused") Observable observable) {
+ public void macInterfaceThemeChanged() {
trayIcon.setImage(imageFactory.loadImage());
}
diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayImageFactory.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayImageFactory.java
index 4f2468de1..7d5031937 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayImageFactory.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayImageFactory.java
@@ -1,20 +1,23 @@
package org.cryptomator.ui.traymenu;
import org.apache.commons.lang3.SystemUtils;
-import org.cryptomator.common.settings.Settings;
+import org.cryptomator.jni.MacApplicationUiAppearance;
+import org.cryptomator.jni.MacApplicationUiInterfaceStyle;
+import org.cryptomator.jni.MacFunctions;
import javax.inject.Inject;
import java.awt.Image;
import java.awt.Toolkit;
+import java.util.Optional;
@TrayMenuScoped
class TrayImageFactory {
- private final Settings settings;
+ private final Optional macFunctions;
@Inject
- TrayImageFactory(Settings settings) {
- this.settings = settings;
+ TrayImageFactory(Optional macFunctions) {
+ this.macFunctions = macFunctions;
}
public Image loadImage() {
@@ -23,7 +26,10 @@ class TrayImageFactory {
}
private String getMacResourceName() {
- switch (settings.theme().get()) {
+ MacApplicationUiInterfaceStyle interfaceStyle = macFunctions.map(MacFunctions::uiAppearance) //
+ .map(MacApplicationUiAppearance::getCurrentInterfaceStyle) //
+ .orElse(MacApplicationUiInterfaceStyle.LIGHT);
+ switch (interfaceStyle) {
case DARK:
return "/tray_icon_mac_white.png";
default:
diff --git a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuModule.java b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuModule.java
index 87573e3b0..9fc9cbe96 100644
--- a/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuModule.java
+++ b/main/ui/src/main/java/org/cryptomator/ui/traymenu/TrayMenuModule.java
@@ -1,9 +1,10 @@
package org.cryptomator.ui.traymenu;
import dagger.Module;
+import org.cryptomator.common.JniModule;
import org.cryptomator.ui.fxapp.FxApplicationComponent;
-@Module(subcomponents = {FxApplicationComponent.class})
+@Module(includes = {JniModule.class}, subcomponents = {FxApplicationComponent.class})
abstract class TrayMenuModule {
}