Fine foreground/background switching, added reopen listener

This commit is contained in:
Sebastian Stenzel
2019-09-13 16:02:05 +02:00
parent 2bbc3e5834
commit 4b48f75aed
2 changed files with 30 additions and 8 deletions

View File

@@ -1,42 +1,68 @@
package org.cryptomator.ui.launcher;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.jni.JniException;
import org.cryptomator.jni.MacApplicationUiState;
import org.cryptomator.jni.MacFunctions;
import org.cryptomator.ui.fxapp.FxApplication;
import org.cryptomator.ui.traymenu.TrayMenuComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.awt.Desktop;
import java.awt.SystemTray;
import java.awt.desktop.AppReopenedEvent;
import java.awt.desktop.AppReopenedListener;
import java.awt.desktop.SystemEventListener;
import java.util.Optional;
@Singleton
public class UiLauncher {
private static final Logger LOG = LoggerFactory.getLogger(UiLauncher.class);
private final Settings settings;
private final TrayMenuComponent.Builder trayComponent;
private final FxApplicationStarter fxApplicationStarter;
private final AppLaunchEventHandler launchEventHandler;
private final Optional<MacFunctions> macFunctions;
@Inject
public UiLauncher(Settings settings, TrayMenuComponent.Builder trayComponent, FxApplicationStarter fxApplicationStarter, AppLaunchEventHandler launchEventHandler) {
public UiLauncher(Settings settings, TrayMenuComponent.Builder trayComponent, FxApplicationStarter fxApplicationStarter, AppLaunchEventHandler launchEventHandler, Optional<MacFunctions> macFunctions) {
this.settings = settings;
this.trayComponent = trayComponent;
this.fxApplicationStarter = fxApplicationStarter;
this.launchEventHandler = launchEventHandler;
this.macFunctions = macFunctions;
}
public void launch() {
boolean hasTrayIcon = false;
final boolean hasTrayIcon;
if (SystemTray.isSupported()) {
trayComponent.build().addIconToSystemTray();
hasTrayIcon = true;
} else {
hasTrayIcon = false;
}
// show window on start?
if (!settings.startHidden().get()) {
fxApplicationStarter.get(hasTrayIcon).thenAccept(FxApplication::showMainWindow);
if (settings.startHidden().get()) {
LOG.debug("Hiding application...");
macFunctions.map(MacFunctions::uiState).ifPresent(JniException.ignore(MacApplicationUiState::transformToAgentApplication));
} else {
showMainWindowAsync(hasTrayIcon);
}
// register app reopen listener
Desktop.getDesktop().addAppEventListener((AppReopenedListener) e -> showMainWindowAsync(hasTrayIcon));
launchEventHandler.startHandlingLaunchEvents(hasTrayIcon);
}
private void showMainWindowAsync(boolean hasTrayIcon) {
fxApplicationStarter.get(hasTrayIcon).thenAccept(FxApplication::showMainWindow);
}
}

View File

@@ -1,8 +1,6 @@
package org.cryptomator.ui.traymenu;
import org.apache.commons.lang3.SystemUtils;
import org.cryptomator.jni.JniException;
import org.cryptomator.jni.MacApplicationUiState;
import org.cryptomator.jni.MacFunctions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,8 +35,6 @@ public class TrayIconController {
if (SystemUtils.IS_OS_WINDOWS) {
// TODO: test on windows: is this a double click?
trayIcon.addActionListener(trayMenuController::showMainWindow);
} else if (SystemUtils.IS_OS_MAC) {
macFunctions.map(MacFunctions::uiState).ifPresent(JniException.ignore(MacApplicationUiState::transformToAgentApplication));
}
try {