diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-07-08 18:31:55 +0200 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2016-07-26 16:29:26 -0400 |
commit | 9a3eadfd5baa8b070bf8d34fbd90ecae964f170c (patch) | |
tree | e8120b8f52821a9650ea2387d8eaf393404e0a0b /platform/android/src/jni.cpp | |
parent | b3c914fb3f52f6a2b96d663f1c57c97c34eb5e23 (diff) | |
download | qtlocation-mapboxgl-9a3eadfd5baa8b070bf8d34fbd90ecae964f170c.tar.gz |
[android] #5610 - Initial Runtime Style Bindings
[android] #5610 - Adjusted public api after discussion
[android] #5610 - added jni binding for NativeMapView#getLayer
[android] #5610 - Added initial test Activity
[android] #5610 - Started on NativePeer implementation for Layer
[android] #5610 - replaced low-level jni code with high-level for native getLayer
[android] 5610 - completed basic layer peer class - constructible from java and c++
[android] #5610 - removed reference that was redundant and causing the finalizer exception
[android] #5610 - Added a property peer
[android] #5610 - added value type to do type conversions - wip
[android] #5610 - simplified property conversion approach - wrapped value with jenv
[android] #5610 - added some more value conversions
[android] #5610 - Finished conversion for basic types
[android] #5610 - allow color's to be set as either an android color int or a String to support all formats in the spec
[android] #5610 - encode color ints as rgba to retain alpha channel
[android] #5610 - recalculate classes after paint property
[android] #5610 - more examples
[android] #5610 - fixed the example
[android] #5610 - cleaned up example code before continueing
[android] #5610 - added layout property example
[android] #5610 - set visibility on layer
[android] #5610 - added removeLayer and example
[android] #5610 - added more type conversions
[android] #5610 - Started on peer classes for layer implementations - WIP
[android] #5610 - First complete layer subclass peer implementation
[android] #5610 - added a little bit of structure before adding the other layer types
[android] #5610 - generate the c++ headers from the style spec
[android] #5610 - make sure the visibility is set as a string
[android] #5610 - Generate c++ layer peer class implementations from the style spec
[android] #5610 - generate java layer peer classes
[android] #5610 - cleanup comments
[android] #5610 - register all c++ peer classes with jni
[android] #5610 - addLayer
[android] #5610 - comment out broken case
[android] #5610 - Sources api - very much WIP
[android] 5610 - GeoJson source implementation and geojson conversion
[android] #5610 - cleanup add source/layer example a bit
[android] #5610 - initial filter api
[android] #5610 - Added filter api on the relevant Layer classes
[android] #5610 - raster layer is not filterable
[android] #5610 - actually make it compile
[android] #5610 - completed filter implementation
[android] #5610 - Vector and Raster Source + examples
[android] #5610 - removed superfluous interface, moved filters to the correct package
[android] #5610 - fixed comments
[android] #5610 - moved tests to the right package
[android] #5610 - hide difference between paint and layout properties in public api, make more performant set method for proeprties
[android] #5610 - fix rebase issue
Diffstat (limited to 'platform/android/src/jni.cpp')
-rwxr-xr-x | platform/android/src/jni.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index c9670bfcb9..18a22cb8b3 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -9,11 +9,15 @@ #include <sys/system_properties.h> #include "jni.hpp" +#include "java_types.hpp" #include "native_map_view.hpp" +#include "style/layers/layers.hpp" +#include "style/sources/sources.hpp" #include <mbgl/map/map.hpp> #include <mbgl/map/camera.hpp> #include <mbgl/annotation/annotation.hpp> +#include <mbgl/style/layer.hpp> #include <mbgl/style/layers/custom_layer.hpp> #include <mbgl/sprite/sprite_image.hpp> #include <mbgl/platform/event.hpp> @@ -1085,6 +1089,81 @@ void nativeRemoveCustomLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapView nativeMapView->getMap().removeLayer(std_string_from_jstring(env, id)); } +jni::jobject* nativeGetLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* layerId) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeGetLayer"); + + assert(env); + assert(nativeMapViewPtr != 0); + + //Get the native map peer + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + + //Find the layer + mbgl::style::Layer* coreLayer = nativeMapView->getMap().getLayer(std_string_from_jstring(env, layerId)); + if (!coreLayer) { + mbgl::Log::Debug(mbgl::Event::JNI, "No layer found"); + return jni::Object<Layer>(); + } + + //Create and return the layer's native peer + return createJavaLayerPeer(*env, nativeMapView->getMap(), *coreLayer); +} + +void nativeAddLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlong nativeLayerPtr, jni::jstring* before) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeAddLayer"); + assert(nativeMapViewPtr != 0); + assert(nativeLayerPtr != 0); + + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + Layer *layer = reinterpret_cast<Layer *>(nativeLayerPtr); + + nativeMapView->getMap().addLayer( + layer->releaseCoreLayer(), + before ? mbgl::optional<std::string>(std_string_from_jstring(env, before)) : mbgl::optional<std::string>() + ); +} + +void nativeRemoveLayer(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeRemoveLayer"); + assert(nativeMapViewPtr != 0); + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + try { + nativeMapView->getMap().removeLayer(std_string_from_jstring(env, id)); + } catch (const std::runtime_error& error) { + jni::ThrowNew(*env, jni::FindClass(*env, "com/mapbox/mapboxsdk/style/layers/NoSuchLayerException"), error.what()); + } +} + +void nativeAddSource(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id, jni::jobject* jsource) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeAddSource"); + assert(nativeMapViewPtr != 0); + assert(id != nullptr); + assert(jsource != nullptr); + + //Convert + mbgl::optional<std::unique_ptr<mbgl::style::Source>> source = convertToNativeSource( + *env, + jni::Object<jni::jobject>(jsource), jni::String(id) + ); + + //Add to map view + if (source) { + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + nativeMapView->getMap().addSource(std::move(*source)); + } +} + +void nativeRemoveSource(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jstring* id) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeRemoveSource"); + assert(nativeMapViewPtr != 0); + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + try { + nativeMapView->getMap().removeSource(std_string_from_jstring(env, id)); + } catch (const std::runtime_error& error) { + jni::ThrowNew(*env, jni::FindClass(*env, "com/mapbox/mapboxsdk/style/layers/NoSuchSourceException"), error.what()); + } +} + // Offline calls begin jlong createDefaultFileSource(JNIEnv *env, jni::jobject* obj, jni::jstring* cachePath_, jni::jstring* assetRoot_, jlong maximumCacheSize) { @@ -1545,6 +1624,9 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { mbgl::android::RegisterNativeHTTPRequest(env); + java::registerNatives(env); + registerNativeLayers(env); + latLngClass = &jni::FindClass(env, "com/mapbox/mapboxsdk/geometry/LatLng"); latLngClass = jni::NewGlobalRef(env, latLngClass).release(); latLngConstructorId = &jni::GetMethodID(env, *latLngClass, "<init>", "(DD)V"); @@ -1699,6 +1781,11 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { MAKE_NATIVE_METHOD(nativeFlyTo, "(JDDDJDD)V"), MAKE_NATIVE_METHOD(nativeAddCustomLayer, "(JLcom/mapbox/mapboxsdk/layers/CustomLayer;Ljava/lang/String;)V"), MAKE_NATIVE_METHOD(nativeRemoveCustomLayer, "(JLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeGetLayer, "(JLjava/lang/String;)Lcom/mapbox/mapboxsdk/style/layers/Layer;"), + MAKE_NATIVE_METHOD(nativeAddLayer, "(JJLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeRemoveLayer, "(JLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeAddSource, "(JLjava/lang/String;Lcom/mapbox/mapboxsdk/style/sources/Source;)V"), + MAKE_NATIVE_METHOD(nativeRemoveSource, "(JLjava/lang/String;)V"), MAKE_NATIVE_METHOD(nativeSetContentPadding, "(JDDDD)V") ); |