diff options
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/connectivity_listener.cpp | 43 | ||||
-rw-r--r-- | platform/android/src/connectivity_listener.hpp | 35 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 2 |
3 files changed, 80 insertions, 0 deletions
diff --git a/platform/android/src/connectivity_listener.cpp b/platform/android/src/connectivity_listener.cpp new file mode 100644 index 0000000000..df5c60a485 --- /dev/null +++ b/platform/android/src/connectivity_listener.cpp @@ -0,0 +1,43 @@ +#include "connectivity_listener.hpp" + +#include <mbgl/storage/network_status.hpp> +#include <mbgl/platform/log.hpp> + +#include <jni/jni.hpp> + +namespace mbgl { +namespace android { + + /** + * Invoked when the construction is initiated from the jvm + */ + ConnectivityListener::ConnectivityListener(jni::JNIEnv&) {} + + ConnectivityListener::~ConnectivityListener() {} + + void ConnectivityListener::onConnectivityStateChanged(jni::JNIEnv&, jni::jboolean connected) { + NetworkStatus::Set(connected ? NetworkStatus::Status::Online : NetworkStatus::Status::Offline); + } + + jni::Class<ConnectivityListener> ConnectivityListener::javaClass; + + void ConnectivityListener::registerNative(jni::JNIEnv& env) { + //Lookup the class + ConnectivityListener::javaClass = *jni::Class<ConnectivityListener>::Find(env).NewGlobalRef(env).release(); + + #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) + + //Register the peer + jni::RegisterNativePeer<ConnectivityListener>( + env, + ConnectivityListener::javaClass, + "nativePtr", + std::make_unique<ConnectivityListener, JNIEnv&>, + "initialize", + "finalize", + METHOD(&ConnectivityListener::onConnectivityStateChanged, "nativeOnConnectivityStateChanged") + ); + } + +} //android +} //mbgl
\ No newline at end of file diff --git a/platform/android/src/connectivity_listener.hpp b/platform/android/src/connectivity_listener.hpp new file mode 100644 index 0000000000..d457dcfd5a --- /dev/null +++ b/platform/android/src/connectivity_listener.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include <mbgl/util/noncopyable.hpp> + +#include <jni/jni.hpp> + +namespace mbgl { +namespace android { + +class ConnectivityListener : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/net/NativeConnectivityListener"; }; + + static jni::Class<ConnectivityListener> javaClass; + + static void registerNative(jni::JNIEnv&); + + /* + * Called when a Java object was created from the jvm side + */ + ConnectivityListener(jni::JNIEnv&); + + ~ConnectivityListener(); + + void onConnectivityStateChanged(jni::JNIEnv&, jni::jboolean); + +}; + +} //android +} //mbgl + + + + diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 1a5efce726..d59ee1b617 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -11,6 +11,7 @@ #include "jni.hpp" #include "java_types.hpp" #include "native_map_view.hpp" +#include "connectivity_listener.hpp" #include "style/layers/layers.hpp" #include "style/sources/sources.hpp" @@ -1701,6 +1702,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { java::registerNatives(env); registerNativeLayers(env); registerNativeSources(env); + ConnectivityListener::registerNative(env); latLngClass = &jni::FindClass(env, "com/mapbox/mapboxsdk/geometry/LatLng"); latLngClass = jni::NewGlobalRef(env, latLngClass).release(); |