implement ConnectivityManager using GNetworkMonitor

This commit is contained in:
Julian Winkler
2024-03-17 18:36:48 +01:00
parent 14217e8724
commit b14549e639
5 changed files with 93 additions and 9 deletions

View File

@@ -0,0 +1,37 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class android_net_ConnectivityManager */
#ifndef _Included_android_net_ConnectivityManager
#define _Included_android_net_ConnectivityManager
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: android_net_ConnectivityManager
* Method: registerNetworkCallback
* Signature: (Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager/NetworkCallback;)V
*/
JNIEXPORT void JNICALL Java_android_net_ConnectivityManager_registerNetworkCallback
(JNIEnv *, jobject, jobject, jobject);
/*
* Class: android_net_ConnectivityManager
* Method: isActiveNetworkMetered
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_android_net_ConnectivityManager_isActiveNetworkMetered
(JNIEnv *, jobject);
/*
* Class: android_net_ConnectivityManager
* Method: nativeGetNetworkAvailable
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_android_net_ConnectivityManager_nativeGetNetworkAvailable
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,35 @@
#include <gio/gio.h>
#include "../defines.h"
#include "../util.h"
#include "../generated_headers/android_net_ConnectivityManager.h"
JNIEXPORT jboolean JNICALL Java_android_net_ConnectivityManager_isActiveNetworkMetered(JNIEnv *env, jobject this)
{
return g_network_monitor_get_network_metered(g_network_monitor_get_default());
}
JNIEXPORT jboolean JNICALL Java_android_net_ConnectivityManager_nativeGetNetworkAvailable(JNIEnv *env, jobject this)
{
return g_network_monitor_get_network_available(g_network_monitor_get_default());
}
static void on_network_changed(GNetworkMonitor* self, gboolean network_available, jobject callback)
{
JNIEnv *env = get_jni_env();
jmethodID method;
if (network_available) {
method = _METHOD(_CLASS(callback), "onAvailable", "(Landroid/net/Network;)V");
} else {
method = _METHOD(_CLASS(callback), "onLost", "(Landroid/net/Network;)V");
}
(*env)->CallVoidMethod(env, callback, method, NULL);
if ((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env);
}
JNIEXPORT void JNICALL Java_android_net_ConnectivityManager_registerNetworkCallback(JNIEnv *env, jobject this, jobject request, jobject callback)
{
g_signal_connect(g_network_monitor_get_default(), "network-changed", G_CALLBACK(on_network_changed), _REF(callback));
}