Skip to content

Commit fee3a18

Browse files
implemented TrayIntegrationProvider
1 parent 455cb80 commit fee3a18

File tree

8 files changed

+134
-2
lines changed

8 files changed

+134
-2
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3030

3131
<!-- runtime dependencies -->
32-
<api.version>0.1.5</api.version>
32+
<api.version>0.1.6</api.version>
3333
<slf4j.version>1.7.30</slf4j.version>
3434
<guava.version>30.0-jre</guava.version>
3535
<gson.version>2.8.6</gson.version>

src/main/headers/org_cryptomator_macos_tray_ActivationPolicy_Native.h

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.cryptomator.macos.tray;
2+
3+
import org.cryptomator.macos.common.NativeLibLoader;
4+
5+
class ActivationPolicy {
6+
7+
/**
8+
* Sets the application's activation policy to <a href="https://developer.apple.com/documentation/appkit/nsapplicationactivationpolicy/nsapplicationactivationpolicyaccessory?language=objc">NSApplicationActivationPolicyAccessory</a>
9+
*/
10+
void transformToAccessory() {
11+
Native.INSTANCE.transformToAccessory();
12+
}
13+
14+
/**
15+
* Requests to focus the current app and sets its activation policy to <a href="https://developer.apple.com/documentation/appkit/nsapplicationactivationpolicy/nsapplicationactivationpolicyregular?language=objc">NSApplicationActivationPolicyRegular</a>
16+
*/
17+
void transformToRegular() {
18+
Native.INSTANCE.transformToRegular();
19+
}
20+
21+
private static class Native {
22+
static final Native INSTANCE = new Native();
23+
24+
private Native() {
25+
NativeLibLoader.loadLib();
26+
}
27+
28+
public native void transformToAccessory();
29+
30+
public native void transformToRegular();
31+
}
32+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.cryptomator.macos.tray;
2+
3+
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
4+
5+
public class MacTrayIntegrationProvider implements TrayIntegrationProvider {
6+
7+
private final ActivationPolicy activationPolicy;
8+
9+
public MacTrayIntegrationProvider() {
10+
this.activationPolicy = new ActivationPolicy();
11+
}
12+
13+
@Override
14+
public void minimizedToTray() {
15+
activationPolicy.transformToAccessory();
16+
}
17+
18+
@Override
19+
public void restoredFromTray() {
20+
activationPolicy.transformToRegular();
21+
}
22+
}

src/main/native/Integrations.xcodeproj/project.pbxproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
9E21340C255429CA006EA872 /* SKYAppearanceObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E21340A255429CA006EA872 /* SKYAppearanceObserver.m */; };
1616
9E21341125542ECE006EA872 /* SKYAppearanceNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E21340F25542ECE006EA872 /* SKYAppearanceNotifier.h */; };
1717
9E21341225542ECE006EA872 /* SKYAppearanceNotifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E21341025542ECE006EA872 /* SKYAppearanceNotifier.m */; };
18+
9EACB1B425557865000F3214 /* org_cryptomator_macos_tray_ActivationPolicy_Native.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EACB1B325557865000F3214 /* org_cryptomator_macos_tray_ActivationPolicy_Native.m */; };
1819
/* End PBXBuildFile section */
1920

2021
/* Begin PBXFileReference section */
@@ -27,6 +28,7 @@
2728
9E21340A255429CA006EA872 /* SKYAppearanceObserver.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SKYAppearanceObserver.m; sourceTree = "<group>"; };
2829
9E21340F25542ECE006EA872 /* SKYAppearanceNotifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SKYAppearanceNotifier.h; sourceTree = "<group>"; };
2930
9E21341025542ECE006EA872 /* SKYAppearanceNotifier.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SKYAppearanceNotifier.m; sourceTree = "<group>"; };
31+
9EACB1B325557865000F3214 /* org_cryptomator_macos_tray_ActivationPolicy_Native.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = org_cryptomator_macos_tray_ActivationPolicy_Native.m; sourceTree = "<group>"; };
3032
/* End PBXFileReference section */
3133

3234
/* Begin PBXFrameworksBuildPhase section */
@@ -43,8 +45,9 @@
4345
9E0819AE1D748ECC000C89E6 = {
4446
isa = PBXGroup;
4547
children = (
46-
9E0819C71D75CABC000C89E6 /* org_cryptomator_macos_keychain_MacKeychain_Native.m */,
4748
74CF2E7A254C295A006266D6 /* org_cryptomator_macos_autostart_MacLaunchServices_Native.m */,
49+
9E0819C71D75CABC000C89E6 /* org_cryptomator_macos_keychain_MacKeychain_Native.m */,
50+
9EACB1B325557865000F3214 /* org_cryptomator_macos_tray_ActivationPolicy_Native.m */,
4851
9E2133FF25542735006EA872 /* org_cryptomator_macos_uiappearance_AppAppearance_Native.m */,
4952
9E2134022554275D006EA872 /* org_cryptomator_macos_uiappearance_MacSystemAppearance_Native.m */,
5053
9E21340F25542ECE006EA872 /* SKYAppearanceNotifier.h */,
@@ -132,6 +135,7 @@
132135
isa = PBXSourcesBuildPhase;
133136
buildActionMask = 2147483647;
134137
files = (
138+
9EACB1B425557865000F3214 /* org_cryptomator_macos_tray_ActivationPolicy_Native.m in Sources */,
135139
74CF2E7B254C295A006266D6 /* org_cryptomator_macos_autostart_MacLaunchServices_Native.m in Sources */,
136140
9E21340C255429CA006EA872 /* SKYAppearanceObserver.m in Sources */,
137141
9E21340025542735006EA872 /* org_cryptomator_macos_uiappearance_AppAppearance_Native.m in Sources */,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// org_cryptomator_macos_tray_ActivationPolicy_Native.m
3+
// Integrations
4+
//
5+
// Created by Sebastian Stenzel on 06.11.20.
6+
// Copyright © 2020 Cryptomator. All rights reserved.
7+
//
8+
9+
#import "org_cryptomator_macos_tray_ActivationPolicy_Native.h"
10+
#import <AppKit/AppKit.h>
11+
12+
JNIEXPORT void JNICALL Java_org_cryptomator_macos_tray_ActivationPolicy_00024Native_transformToAccessory
13+
(JNIEnv *env, jobject thisObj) {
14+
[NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory];
15+
}
16+
17+
JNIEXPORT void JNICALL Java_org_cryptomator_macos_tray_ActivationPolicy_00024Native_transformToRegular
18+
(JNIEnv *env, jobject thisObj) {
19+
[NSApp activateIgnoringOtherApps:YES];
20+
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
21+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.cryptomator.macos.tray.MacTrayIntegrationProvider
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.cryptomator.macos.tray;
2+
3+
import org.cryptomator.integrations.tray.TrayIntegrationProvider;
4+
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.api.DisplayName;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.util.ServiceLoader;
9+
10+
public class MacTrayIntegrationProviderTest {
11+
12+
@Test
13+
@DisplayName("MacTrayIntegrationProvider can be loaded")
14+
public void testLoadMacTrayIntegrationProvider() {
15+
var loadedProviders = ServiceLoader.load(TrayIntegrationProvider.class);
16+
var provider = loadedProviders.stream()
17+
.filter(p -> p.type().equals(MacTrayIntegrationProvider.class))
18+
.map(ServiceLoader.Provider::get)
19+
.findAny();
20+
Assertions.assertTrue(provider.isPresent());
21+
}
22+
23+
}

0 commit comments

Comments
 (0)