added mac native function for listening to system interface theme changes and changing the tray icon accordingly [ci skip]

This commit is contained in:
Tobias Hagemann
2019-08-19 15:55:07 +02:00
parent 60bdafca94
commit 5c26c23619
8 changed files with 61 additions and 40 deletions
+5 -1
View File
@@ -27,7 +27,11 @@
<groupId>org.cryptomator</groupId>
<artifactId>webdav-nio-adapter</artifactId>
</dependency>
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>jni</artifactId>
</dependency>
<!-- JavaFx -->
<dependency>
<groupId>org.openjfx</groupId>
@@ -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<MacFunctions> provideOptionalMacFunctions() {
return JniFunctions.macFunctions();
}
@Provides
Optional<WinFunctions> provideOptionalWinFunctions() {
return JniFunctions.winFunctions();
}
}
+1 -5
View File
@@ -23,11 +23,7 @@
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>org.cryptomator</groupId>
<artifactId>jni</artifactId>
</dependency>
<!-- Google -->
<dependency>
<groupId>com.google.guava</groupId>
@@ -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<MacFunctions> provideOptionalMacFunctions() {
return JniFunctions.macFunctions();
}
@Provides
Optional<WinFunctions> provideOptionalWinFunctions() {
return JniFunctions.winFunctions();
}
@Provides
@ElementsIntoSet
Set<KeychainAccessStrategy> provideKeychainAccessStrategies(MacSystemKeychainAccess macKeychain, WindowsProtectedKeychainAccess winKeychain, LinuxSecretServiceKeychainAccess linKeychain) {
+1 -1
View File
@@ -26,7 +26,7 @@
<!-- dependency versions -->
<cryptomator.cryptolib.version>1.2.1</cryptomator.cryptolib.version>
<cryptomator.cryptofs.version>1.8.7</cryptomator.cryptofs.version>
<cryptomator.jni.version>2.1.0</cryptomator.jni.version>
<cryptomator.jni.version>2.2.0-SNAPSHOT</cryptomator.jni.version>
<cryptomator.fuse.version>1.2.0</cryptomator.fuse.version>
<cryptomator.dokany.version>1.1.11</cryptomator.dokany.version>
<cryptomator.webdav.version>1.0.10</cryptomator.webdav.version>
@@ -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> macFunctions;
@Inject
TrayIconController(Settings settings, TrayImageFactory imageFactory, TrayMenuController trayMenuController) {
this.settings = settings;
TrayIconController(TrayImageFactory imageFactory, TrayMenuController trayMenuController, Optional<MacFunctions> 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());
}
@@ -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> macFunctions;
@Inject
TrayImageFactory(Settings settings) {
this.settings = settings;
TrayImageFactory(Optional<MacFunctions> 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:
@@ -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 {
}