From 742d6d827567608f94b0743b7bac5dbef94724e3 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Thu, 8 Sep 2016 17:53:00 +0200 Subject: [android] set connectivity state pro-actively --- platform/android/src/connectivity_listener.cpp | 43 ++++++++++++++++++++++++++ platform/android/src/connectivity_listener.hpp | 35 +++++++++++++++++++++ platform/android/src/jni.cpp | 2 ++ 3 files changed, 80 insertions(+) create mode 100644 platform/android/src/connectivity_listener.cpp create mode 100644 platform/android/src/connectivity_listener.hpp (limited to 'platform/android/src') 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 +#include + +#include + +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::javaClass; + + void ConnectivityListener::registerNative(jni::JNIEnv& env) { + //Lookup the class + ConnectivityListener::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); + + #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) + + //Register the peer + jni::RegisterNativePeer( + env, + ConnectivityListener::javaClass, + "nativePtr", + std::make_unique, + "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 + +#include + +namespace mbgl { +namespace android { + +class ConnectivityListener : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/net/NativeConnectivityListener"; }; + + static jni::Class 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(); -- cgit v1.2.1