diff --git a/pom.xml b/pom.xml
index 24f35de0a..b11524a5e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@
2.9.0
- 1.8.0-beta1
+ 1.8.0-SNAPSHOT
1.5.1
1.5.0-beta1
1.7.0-beta1
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index f1f2aa5c6..a74e4b903 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -1,4 +1,6 @@
import ch.qos.logback.classic.spi.Configurator;
+import org.cryptomator.integrations.notify.NotifyService2;
+import org.cryptomator.integrationsbase.JavaFXNotifyService;
import org.cryptomator.networking.SSLContextWithPKCS12TrustStore;
import org.cryptomator.common.locationpresets.DropboxLinuxLocationPresetsProvider;
import org.cryptomator.common.locationpresets.DropboxMacLocationPresetsProvider;
@@ -64,6 +66,7 @@ open module org.cryptomator.desktop {
provides TrayMenuController with AwtTrayMenuController;
provides Configurator with LogbackConfiguratorFactory;
provides SSLContextProvider with SSLContextWithWindowsCertStore, SSLContextWithMacKeychain, SSLContextWithPKCS12TrustStore;
+ provides NotifyService2 with JavaFXNotifyService;
provides LocationPresetsProvider with //
DropboxWindowsLocationPresetsProvider, DropboxMacLocationPresetsProvider, DropboxLinuxLocationPresetsProvider, //
GoogleDriveMacLocationPresetsProvider, GoogleDriveWindowsLocationPresetsProvider, //
diff --git a/src/main/java/org/cryptomator/integrationsbase/JavaFXNotifyService.java b/src/main/java/org/cryptomator/integrationsbase/JavaFXNotifyService.java
new file mode 100644
index 000000000..a9b822d99
--- /dev/null
+++ b/src/main/java/org/cryptomator/integrationsbase/JavaFXNotifyService.java
@@ -0,0 +1,30 @@
+package org.cryptomator.integrationsbase;
+
+import org.cryptomator.integrations.common.DisplayName;
+import org.cryptomator.integrations.common.Priority;
+import org.cryptomator.integrations.notify.NotifyService;
+import org.cryptomator.integrations.notify.NotifyService2;
+import org.cryptomator.integrations.notify.NotifyServiceException;
+
+import java.util.ArrayList;
+
+@Priority(Priority.FALLBACK)
+//@LocalizedDisplayName(bundle = "strings", key ="")
+@DisplayName("Cryptomator App Window")
+public class JavaFXNotifyService implements NotifyService2 {
+
+ //TODO: ipcMessageFile!
+
+ @Override
+ public void sendNotification(String header, String description, NotifyService2.Action... actions) throws NotifyServiceException {
+ var argList = new ArrayList();
+ argList.add(header);
+ argList.add(description);
+ for(var action: actions) {
+ argList.add(action.label());
+ argList.add(action.returnMessage());
+ }
+ NotificationApp.main(argList.toArray(new String[] {}));
+ }
+
+}
diff --git a/src/main/java/org/cryptomator/integrationsbase/NotificationApp.java b/src/main/java/org/cryptomator/integrationsbase/NotificationApp.java
new file mode 100644
index 000000000..c02a0057a
--- /dev/null
+++ b/src/main/java/org/cryptomator/integrationsbase/NotificationApp.java
@@ -0,0 +1,52 @@
+package org.cryptomator.integrationsbase;
+
+import org.apache.commons.lang3.SystemUtils;
+import org.cryptomator.ui.common.FxmlLoaderFactory;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyCodeCombination;
+import javafx.scene.input.KeyCombination;
+import javafx.scene.layout.AnchorPane;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+import javafx.util.BuilderFactory;
+import java.io.IOException;
+import java.util.ResourceBundle;
+
+
+public class NotificationApp extends Application {
+
+
+ private static final KeyCodeCombination ALT_F4 = new KeyCodeCombination(KeyCode.F4, KeyCombination.ALT_DOWN);
+ private static final KeyCodeCombination SHORTCUT_W = new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN);
+
+ @Override
+ public void start(Stage stage) throws IOException {
+ var args = getParameters();
+ String javaVersion = System.getProperty("java.version");
+ var url = getClass().getResource("/fxml/notification_window.fxml");
+ var root = FXMLLoader.load(url, ResourceBundle.getBundle("i18n.strings"));
+ var scene = new Scene(root);
+ stage.setScene(scene);
+ setupDefaultAccelerators(scene, stage);
+ stage.show();
+ stage.requestFocus();
+ }
+
+ public static void main(String[] args) {
+ //assert args.length >= 2;
+ launch(args);
+ }
+
+ private void setupDefaultAccelerators(Scene scene, Stage stage) {
+ if (SystemUtils.IS_OS_WINDOWS) {
+ scene.getAccelerators().put(ALT_F4, stage::close);
+ } else {
+ scene.getAccelerators().put(SHORTCUT_W, stage::close);
+ }
+ }
+}
diff --git a/src/main/java/org/cryptomator/integrationsbase/NotificationWindowController.java b/src/main/java/org/cryptomator/integrationsbase/NotificationWindowController.java
new file mode 100644
index 000000000..e6aca952a
--- /dev/null
+++ b/src/main/java/org/cryptomator/integrationsbase/NotificationWindowController.java
@@ -0,0 +1,20 @@
+package org.cryptomator.integrationsbase;
+
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+
+public class NotificationWindowController {
+
+ public NotificationWindowController() {
+
+ }
+
+ @FXML
+ public void initialize() {
+ System.out.println("Hello");
+ }
+
+ public void handleButtonAction(ActionEvent actionEvent) {
+ System.out.println("OKAY");
+ }
+}
diff --git a/src/main/java/org/cryptomator/ipc/HandleNotificationCallbackMessage.java b/src/main/java/org/cryptomator/ipc/HandleNotificationCallbackMessage.java
new file mode 100644
index 000000000..cfd8cfdb2
--- /dev/null
+++ b/src/main/java/org/cryptomator/ipc/HandleNotificationCallbackMessage.java
@@ -0,0 +1,22 @@
+package org.cryptomator.ipc;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+
+record HandleNotificationCallbackMessage(String content) implements IpcMessage {
+
+ @Override
+ public MessageType getMessageType() {
+ return MessageType.HANDLE_NOTIFICATION_CALLBACK;
+ }
+
+ @Override
+ public ByteBuffer encodePayload() {
+ return ByteBuffer.wrap(content.getBytes(StandardCharsets.UTF_8));
+ }
+
+ public static IpcMessage decode(ByteBuffer byteBuffer) {
+ var content = StandardCharsets.UTF_8.decode(byteBuffer).toString();
+ return new HandleNotificationCallbackMessage(content);
+ }
+}
diff --git a/src/main/java/org/cryptomator/ipc/IpcMessage.java b/src/main/java/org/cryptomator/ipc/IpcMessage.java
index 7f76da295..928f79c69 100644
--- a/src/main/java/org/cryptomator/ipc/IpcMessage.java
+++ b/src/main/java/org/cryptomator/ipc/IpcMessage.java
@@ -10,11 +10,12 @@ import java.nio.channels.WritableByteChannel;
import java.util.function.Function;
//TODO can the enum be removed?
-sealed interface IpcMessage permits HandleLaunchArgsMessage, RevealRunningAppMessage {
+sealed interface IpcMessage permits HandleLaunchArgsMessage, RevealRunningAppMessage, HandleNotificationCallbackMessage {
enum MessageType {
REVEAL_RUNNING_APP(RevealRunningAppMessage::decode),
- HANDLE_LAUNCH_ARGS(HandleLaunchArgsMessage::decode);
+ HANDLE_LAUNCH_ARGS(HandleLaunchArgsMessage::decode),
+ HANDLE_NOTIFICATION_CALLBACK(HandleNotificationCallbackMessage::decode);
private final Function decoder;
diff --git a/src/main/java/org/cryptomator/ipc/IpcMessageListener.java b/src/main/java/org/cryptomator/ipc/IpcMessageListener.java
index 756305cbe..bab4c2e8e 100644
--- a/src/main/java/org/cryptomator/ipc/IpcMessageListener.java
+++ b/src/main/java/org/cryptomator/ipc/IpcMessageListener.java
@@ -8,6 +8,7 @@ public interface IpcMessageListener {
switch (message) {
case RevealRunningAppMessage m -> revealRunningApp(); // TODO: rename to _ with JEP 443
case HandleLaunchArgsMessage m -> handleLaunchArgs(m.args());
+ case HandleNotificationCallbackMessage m -> handleNotificationCallback(m.content());
}
}
@@ -15,4 +16,6 @@ public interface IpcMessageListener {
void handleLaunchArgs(List args);
+ void handleNotificationCallback(String content);
+
}
diff --git a/src/main/resources/fxml/notification_window.fxml b/src/main/resources/fxml/notification_window.fxml
new file mode 100644
index 000000000..7ad99337c
--- /dev/null
+++ b/src/main/resources/fxml/notification_window.fxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+