[android] Add jni binding for styleable snapshotter (#16286)

* [android] Add jni binding for styleable snapshotter

* Remove Map parameter from factories

- remove unused map from factory interfaces. Map is only needed for repaint.

* implement addlayer function

* Implement addsource function for snapshotter

* Implement addImages function

* format codes

* Apply baseline

* Update CHANGELOG.md

* Update map_snapshotter.cpp

* Destroy snapshotter on the thread it was created

* Activate file sources in start

* Use custom deleter for snapshotter

* format codes

* Release snapshotter pointer to deleting lambda

* Clang format

* Update CHANGELOG.md

* Fix review comments

* FIx review comments

Co-authored-by: Alexander Shalamov <alexander.shalamov@mapbox.com>
This commit is contained in:
Kevin Li
2020-03-24 14:33:54 +08:00
committed by GitHub
parent 1adc436c9d
commit 3f45b0a24b
34 changed files with 429 additions and 243 deletions

View File

@@ -26,16 +26,12 @@ namespace android {
/**
* Creates a non-owning peer object (for layers currently attached to the map)
*/
CircleLayer::CircleLayer(mbgl::Map& map, mbgl::style::CircleLayer& coreLayer)
: Layer(map, coreLayer) {
}
CircleLayer::CircleLayer(mbgl::style::CircleLayer& coreLayer) : Layer(coreLayer) {}
/**
* Creates an owning peer object (for layers not attached to the map)
*/
CircleLayer::CircleLayer(mbgl::Map& map, std::unique_ptr<mbgl::style::CircleLayer> coreLayer)
: Layer(map, std::move(coreLayer)) {
}
CircleLayer::CircleLayer(std::unique_ptr<mbgl::style::CircleLayer> coreLayer) : Layer(std::move(coreLayer)) {}
CircleLayer::~CircleLayer() = default;
@@ -213,14 +209,18 @@ namespace android {
}
} // namespace
jni::Local<jni::Object<Layer>> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style::Layer& layer) {
jni::Local<jni::Object<Layer>> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env,
mbgl::style::Layer& layer) {
assert(layer.baseImpl->getTypeInfo() == getTypeInfo());
return createJavaPeer(env, new CircleLayer(map, toCircleLayer(layer)));
return createJavaPeer(env, new CircleLayer(toCircleLayer(layer)));
}
jni::Local<jni::Object<Layer>> CircleJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> layer) {
jni::Local<jni::Object<Layer>> CircleJavaLayerPeerFactory::createJavaLayerPeer(
jni::JNIEnv& env, std::unique_ptr<mbgl::style::Layer> layer) {
assert(layer->baseImpl->getTypeInfo() == getTypeInfo());
return createJavaPeer(env, new CircleLayer(map, std::unique_ptr<mbgl::style::CircleLayer>(static_cast<mbgl::style::CircleLayer*>(layer.release()))));
return createJavaPeer(env,
new CircleLayer(std::unique_ptr<mbgl::style::CircleLayer>(
static_cast<mbgl::style::CircleLayer*>(layer.release()))));
}
void CircleJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) {
@@ -231,7 +231,9 @@ namespace android {
// Register the peer
jni::RegisterNativePeer<CircleLayer>(
env, javaClass, "nativePtr",
env,
javaClass,
"nativePtr",
jni::MakePeer<CircleLayer, jni::String&, jni::String&>,
"initialize",
"finalize",