summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-02-24 16:14:43 +0200
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-02-28 09:33:04 -0800
commit62e85c1224de6d29b3c52f7049aff7e14347211d (patch)
tree229073896e9a20a4ec6ee59536888936f46a936c
parent3e48b377fd1024e86c6d985c7b66c729fe93ba43 (diff)
downloadqtlocation-mapboxgl-62e85c1224de6d29b3c52f7049aff7e14347211d.tar.gz
[android] add unknown source type
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/UnknownSource.java25
-rw-r--r--platform/android/config.cmake2
-rw-r--r--platform/android/src/style/sources/sources.cpp8
-rw-r--r--platform/android/src/style/sources/unknown_source.cpp42
-rw-r--r--platform/android/src/style/sources/unknown_source.hpp28
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