diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-02-24 16:14:43 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-02-28 09:33:04 -0800 |
commit | 62e85c1224de6d29b3c52f7049aff7e14347211d (patch) | |
tree | 229073896e9a20a4ec6ee59536888936f46a936c | |
parent | 3e48b377fd1024e86c6d985c7b66c729fe93ba43 (diff) | |
download | qtlocation-mapboxgl-62e85c1224de6d29b3c52f7049aff7e14347211d.tar.gz |
[android] add unknown source type
5 files changed, 102 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/UnknownSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/UnknownSource.java new file mode 100644 index 0000000000..4a97d71f9a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/UnknownSource.java @@ -0,0 +1,25 @@ +package com.mapbox.mapboxsdk.style.sources; + +import android.support.annotation.UiThread; + +/** + * An unknown type of source + */ +@UiThread +public class UnknownSource extends Source { + + /** + * Creates a UnknownSource. + * + * @param nativePtr pointer used by core + */ + UnknownSource(long nativePtr) { + super(nativePtr); + } + + protected native void initialize(); + + @Override + protected native void finalize() throws Throwable; + +} diff --git a/platform/android/config.cmake b/platform/android/config.cmake index 2a66f32b76..18458deba6 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -124,6 +124,8 @@ macro(mbgl_platform_core) platform/android/src/style/sources/sources.hpp platform/android/src/style/sources/raster_source.cpp platform/android/src/style/sources/raster_source.hpp + platform/android/src/style/sources/unknown_source.cpp + platform/android/src/style/sources/unknown_source.hpp platform/android/src/style/sources/vector_source.cpp platform/android/src/style/sources/vector_source.hpp platform/android/src/style/functions/stop.cpp diff --git a/platform/android/src/style/sources/sources.cpp b/platform/android/src/style/sources/sources.cpp index cae4bb47b2..b4e70202b4 100644 --- a/platform/android/src/style/sources/sources.cpp +++ b/platform/android/src/style/sources/sources.cpp @@ -8,6 +8,7 @@ #include "source.hpp" #include "geojson_source.hpp" #include "raster_source.hpp" +#include "unknown_source.hpp" #include "vector_source.hpp" namespace mbgl { @@ -22,7 +23,7 @@ Source* initializeSourcePeer(mbgl::Map& map, mbgl::style::Source& coreSource) { } else if (coreSource.is<mbgl::style::GeoJSONSource>()) { source = new GeoJSONSource(map, *coreSource.as<mbgl::style::GeoJSONSource>()); } else { - throw new std::runtime_error("Source type not implemented"); + source = new UnknownSource(map, coreSource); } return source; @@ -37,9 +38,10 @@ jni::jobject* createJavaSourcePeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style void registerNativeSources(jni::JNIEnv& env) { Source::registerNative(env); - VectorSource::registerNative(env); - RasterSource::registerNative(env); GeoJSONSource::registerNative(env); + RasterSource::registerNative(env); + UnknownSource::registerNative(env); + VectorSource::registerNative(env); } } diff --git a/platform/android/src/style/sources/unknown_source.cpp b/platform/android/src/style/sources/unknown_source.cpp new file mode 100644 index 0000000000..c1b1cc8c02 --- /dev/null +++ b/platform/android/src/style/sources/unknown_source.cpp @@ -0,0 +1,42 @@ +#include "unknown_source.hpp" + +namespace { + + // Dummy initializer (We don't support initializing this from the JVM) + std::unique_ptr<mbgl::android::UnknownSource> init(jni::JNIEnv&) { + throw new std::runtime_error("UnknownSource should not be initialized from the JVM"); + } + +} // namespace + +namespace mbgl { +namespace android { + + UnknownSource::UnknownSource(mbgl::Map& map, mbgl::style::Source& coreSource) + : Source(map, coreSource) { + } + + jni::Class<UnknownSource> UnknownSource::javaClass; + + jni::jobject* UnknownSource::createJavaPeer(jni::JNIEnv& env) { + static auto constructor = UnknownSource::javaClass.template GetConstructor<jni::jlong>(env); + return UnknownSource::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); + } + + void UnknownSource::registerNative(jni::JNIEnv& env) { + // Lookup the class + UnknownSource::javaClass = *jni::Class<UnknownSource>::Find(env).NewGlobalRef(env).release(); + + #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) + + // Register the peer + jni::RegisterNativePeer<UnknownSource>( + env, UnknownSource::javaClass, "nativePtr", + init, + "initialize", + "finalize" + ); + } + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/style/sources/unknown_source.hpp b/platform/android/src/style/sources/unknown_source.hpp new file mode 100644 index 0000000000..3c37239792 --- /dev/null +++ b/platform/android/src/style/sources/unknown_source.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include "source.hpp" +#include <mbgl/style/source.hpp> +#include <jni/jni.hpp> + +namespace mbgl { +namespace android { + +class UnknownSource : public Source { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/sources/UnknownSource"; }; + + static jni::Class<UnknownSource> javaClass; + + static void registerNative(jni::JNIEnv&); + + UnknownSource(mbgl::Map&, mbgl::style::Source&); + + ~UnknownSource() = default; + + jni::jobject* createJavaPeer(jni::JNIEnv&); + +}; // class UnknownSource + +} // namespace android +} // namespace mbgl |