diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 8dfe5f1..7c4b06b 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -55,6 +55,13 @@ + + + + + + diff --git a/android/src/main/java/com/tailscale/ipn/IPNReceiver.java b/android/src/main/java/com/tailscale/ipn/IPNReceiver.java new file mode 100644 index 0000000..e694727 --- /dev/null +++ b/android/src/main/java/com/tailscale/ipn/IPNReceiver.java @@ -0,0 +1,20 @@ +package com.tailscale.ipn; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class IPNReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction() == "com.tailscale.ipn.CONNECT_VPN") { + connect(); + } else if (intent.getAction() == "com.tailscale.ipn.DISCONNECT_VPN") { + disconnect(); + } + } + + private native void connect(); + private native void disconnect(); +} diff --git a/cmd/tailscale/callbacks.go b/cmd/tailscale/callbacks.go index 0895a99..1666c3f 100644 --- a/cmd/tailscale/callbacks.go +++ b/cmd/tailscale/callbacks.go @@ -102,6 +102,16 @@ func Java_com_tailscale_ipn_IPNService_disconnect(env *C.JNIEnv, this C.jobject) onDisconnect <- jni.NewGlobalRef(jenv, jni.Object(this)) } +//export Java_com_tailscale_ipn_IPNReceiver_connect +func Java_com_tailscale_ipn_IPNReceiver_connect(env *C.JNIEnv, this C.jobject) { + requestBackend(ConnectEvent{Enable: true}) +} + +//export Java_com_tailscale_ipn_IPNReceiver_disconnect +func Java_com_tailscale_ipn_IPNReceiver_disconnect(env *C.JNIEnv, this C.jobject) { + requestBackend(ConnectEvent{Enable: false}) +} + //export Java_com_tailscale_ipn_App_onConnectivityChanged func Java_com_tailscale_ipn_App_onConnectivityChanged(env *C.JNIEnv, cls C.jclass, connected C.jboolean) { select {