diff options
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/android_renderer_frontend.cpp | 4 | ||||
-rw-r--r-- | platform/android/src/java_types.cpp | 8 | ||||
-rw-r--r-- | platform/android/src/java_types.hpp | 6 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 157 | ||||
-rw-r--r-- | platform/android/src/jni.hpp | 3 | ||||
-rwxr-xr-x | platform/android/src/jni_native.cpp | 164 | ||||
-rw-r--r-- | platform/android/src/jni_native.hpp | 11 | ||||
-rw-r--r-- | platform/android/src/main.cpp | 2 | ||||
-rw-r--r-- | platform/android/src/map/camera_position.cpp | 22 | ||||
-rw-r--r-- | platform/android/src/map/camera_position.hpp | 4 | ||||
-rw-r--r-- | platform/android/src/map_renderer.cpp | 6 | ||||
-rw-r--r-- | platform/android/src/map_renderer.hpp | 2 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.cpp | 65 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.hpp | 15 | ||||
-rw-r--r-- | platform/android/src/snapshotter/map_snapshotter.cpp | 8 | ||||
-rw-r--r-- | platform/android/src/snapshotter/map_snapshotter.hpp | 1 | ||||
-rw-r--r-- | platform/android/src/style/android_conversion.hpp | 15 | ||||
-rw-r--r-- | platform/android/src/style/value.cpp | 6 | ||||
-rw-r--r-- | platform/android/src/style/value.hpp | 1 |
19 files changed, 273 insertions, 227 deletions
diff --git a/platform/android/src/android_renderer_frontend.cpp b/platform/android/src/android_renderer_frontend.cpp index 6862fabcb4..d1a2624f0d 100644 --- a/platform/android/src/android_renderer_frontend.cpp +++ b/platform/android/src/android_renderer_frontend.cpp @@ -42,8 +42,8 @@ public: delegate.invoke(&RendererObserver::onWillStartRenderingFrame); } - void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded) override { - delegate.invoke(&RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded); + void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded, bool placementChanged) override { + delegate.invoke(&RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded, placementChanged); } void onDidFinishRenderingMap() override { diff --git a/platform/android/src/java_types.cpp b/platform/android/src/java_types.cpp index dd165470cf..7a1ba93a58 100644 --- a/platform/android/src/java_types.cpp +++ b/platform/android/src/java_types.cpp @@ -18,6 +18,10 @@ namespace java { jni::jclass* Map::jclass; jni::jmethodID* Map::getMethodId; + jni::jmethodID* Map::keySetMethodId; + + jni::jclass* Set::jclass; + jni::jmethodID* Set::toArrayMethodId; void registerNatives(JNIEnv& env) { ObjectArray::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "[Ljava/lang/Object;")).release(); @@ -34,6 +38,10 @@ namespace java { Map::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Map")).release(); Map::getMethodId = &jni::GetMethodID(env, *Map::jclass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); + Map::keySetMethodId = &jni::GetMethodID(env, *Map::jclass, "keySet", "()Ljava/util/Set;"); + + Set::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Set")).release(); + Set::toArrayMethodId = &jni::GetMethodID(env, *Set::jclass, "toArray", "()[Ljava/lang/Object;"); } } diff --git a/platform/android/src/java_types.hpp b/platform/android/src/java_types.hpp index edec5cb550..c7c93ce71b 100644 --- a/platform/android/src/java_types.hpp +++ b/platform/android/src/java_types.hpp @@ -29,6 +29,12 @@ namespace java { struct Map { static jni::jclass* jclass; static jni::jmethodID* getMethodId; + static jni::jmethodID* keySetMethodId; + }; + + struct Set { + static jni::jclass* jclass; + static jni::jmethodID* toArrayMethodId; }; void registerNatives(JNIEnv&); diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 088b3b796c..189ec29dce 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -2,66 +2,9 @@ #include <mbgl/util/logging.hpp> -#include "annotation/marker.hpp" -#include "annotation/polygon.hpp" -#include "annotation/polyline.hpp" -#include "bitmap.hpp" -#include "bitmap_factory.hpp" -#include "connectivity_listener.hpp" -#include "conversion/conversion.hpp" -#include "conversion/collection.hpp" -#include "file_source.hpp" -#include "geojson/feature.hpp" -#include "geojson/feature_collection.hpp" -#include "geojson/geometry.hpp" -#include "geojson/geometry_collection.hpp" -#include "geojson/line_string.hpp" -#include "geojson/multi_line_string.hpp" -#include "geojson/multi_point.hpp" -#include "geojson/multi_polygon.hpp" -#include "geojson/point.hpp" -#include "geojson/polygon.hpp" -#include "geometry/lat_lng.hpp" -#include "geometry/lat_lng_bounds.hpp" -#include "geometry/lat_lng_quad.hpp" -#include "geometry/projected_meters.hpp" -#include "graphics/pointf.hpp" -#include "graphics/rectf.hpp" -#include "gson/json_array.hpp" -#include "gson/json_element.hpp" -#include "gson/json_object.hpp" -#include "gson/json_primitive.hpp" -#include "java_types.hpp" -#include "map_renderer.hpp" -#include "map_renderer_runnable.hpp" -#include "native_map_view.hpp" -#ifndef MBGL_MODULE_OFFLINE_DISABLE -#include "offline/offline_manager.hpp" -#include "offline/offline_region.hpp" -#include "offline/offline_region_definition.hpp" -#include "offline/offline_region_error.hpp" -#include "offline/offline_region_status.hpp" -#endif -#include "style/transition_options.hpp" -#include "style/layers/layer_manager.hpp" -#include "style/sources/source.hpp" -#include "style/light.hpp" -#include "style/formatted.hpp" -#include "style/formatted_section.hpp" -#ifndef MBGL_MODULE_SNAPSHOT_DISABLE -#include "snapshotter/map_snapshotter.hpp" -#include "snapshotter/map_snapshot.hpp" -#endif -#include "text/collator_jni.hpp" -#include "text/local_glyph_rasterizer_jni.hpp" -#include "text/format_number_jni.hpp" -#include "logger.hpp" - namespace mbgl { namespace android { -void RegisterNativeHTTPRequest(JNIEnv&); - JavaVM* theJVM; //TODO: remove @@ -107,105 +50,5 @@ void detach_jni_thread(JavaVM* vm, JNIEnv** env, bool detach) { *env = nullptr; } -void registerNatives(JavaVM *vm) { - theJVM = vm; - - jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); - - // For the DefaultFileSource - static mbgl::util::RunLoop mainRunLoop; - FileSource::registerNative(env); - - // Basic types - java::registerNatives(env); - java::util::registerNative(env); - PointF::registerNative(env); - RectF::registerNative(env); - - // GeoJSON - geojson::Feature::registerNative(env); - geojson::FeatureCollection::registerNative(env); - geojson::Geometry::registerNative(env); - geojson::GeometryCollection::registerNative(env); - geojson::LineString::registerNative(env); - geojson::MultiLineString::registerNative(env); - geojson::MultiPoint::registerNative(env); - geojson::MultiPolygon::registerNative(env); - geojson::Point::registerNative(env); - geojson::Polygon::registerNative(env); - - // Geometry - LatLng::registerNative(env); - LatLngBounds::registerNative(env); - LatLngQuad::registerNative(env); - ProjectedMeters::registerNative(env); - - // GSon - gson::JsonArray::registerNative(env); - gson::JsonElement::registerNative(env); - gson::JsonObject::registerNative(env); - gson::JsonPrimitive::registerNative(env); - - //Annotation - Marker::registerNative(env); - Polygon::registerNative(env); - Polyline::registerNative(env); - - // Map - MapRenderer::registerNative(env); - MapRendererRunnable::registerNative(env); - NativeMapView::registerNative(env); - - // Http - RegisterNativeHTTPRequest(env); - - // Bitmap - Bitmap::registerNative(env); - BitmapFactory::registerNative(env); - - // Style - TransitionOptions::registerNative(env); - LayerManagerAndroid::get()->registerNative(env); - Source::registerNative(env); - Light::registerNative(env); - Position::registerNative(env); - Formatted::registerNative(env); - FormattedSection::registerNative(env); - - // Map - CameraPosition::registerNative(env); - Image::registerNative(env); - - // Connectivity - ConnectivityListener::registerNative(env); - - // Offline -#ifndef MBGL_MODULE_OFFLINE_DISABLE - OfflineManager::registerNative(env); - OfflineRegion::registerNative(env); - OfflineRegionDefinition::registerNative(env); - OfflineTilePyramidRegionDefinition::registerNative(env); - OfflineGeometryRegionDefinition::registerNative(env); - OfflineRegionError::registerNative(env); - OfflineRegionStatus::registerNative(env); -#endif - - // Snapshotter -#ifndef MBGL_MODULE_SNAPSHOT_DISABLE - MapSnapshotter::registerNative(env); - MapSnapshot::registerNative(env); -#endif - - // text - LocalGlyphRasterizer::registerNative(env); - Locale::registerNative(env); - Collator::registerNative(env); - StringUtils::registerNative(env); - NumberFormat::registerNative(env); - - // Logger - Logger::registerNative(env); -} - } // namespace android } // namespace mbgl diff --git a/platform/android/src/jni.hpp b/platform/android/src/jni.hpp index e5df92e701..cb519f911d 100644 --- a/platform/android/src/jni.hpp +++ b/platform/android/src/jni.hpp @@ -1,6 +1,7 @@ #pragma once #include <string> +#include <jni/jni.hpp> typedef struct _jmethodID* jmethodID; typedef struct _JavaVM JavaVM; @@ -17,7 +18,5 @@ extern std::string dataPath; bool attach_jni_thread(JavaVM* vm, JNIEnv** env, std::string threadName); void detach_jni_thread(JavaVM* vm, JNIEnv** env, bool detach); -extern void registerNatives(JavaVM* vm); - } // namespace android } // namespace mbgl diff --git a/platform/android/src/jni_native.cpp b/platform/android/src/jni_native.cpp new file mode 100755 index 0000000000..df96ba9759 --- /dev/null +++ b/platform/android/src/jni_native.cpp @@ -0,0 +1,164 @@ +#include "jni_native.hpp" + +#include "annotation/marker.hpp" +#include "annotation/polygon.hpp" +#include "annotation/polyline.hpp" +#include "bitmap.hpp" +#include "bitmap_factory.hpp" +#include "connectivity_listener.hpp" +#include "conversion/conversion.hpp" +#include "conversion/collection.hpp" +#include "file_source.hpp" +#include "geojson/feature.hpp" +#include "geojson/feature_collection.hpp" +#include "geojson/geometry.hpp" +#include "geojson/geometry_collection.hpp" +#include "geojson/line_string.hpp" +#include "geojson/multi_line_string.hpp" +#include "geojson/multi_point.hpp" +#include "geojson/multi_polygon.hpp" +#include "geojson/point.hpp" +#include "geojson/polygon.hpp" +#include "geometry/lat_lng.hpp" +#include "geometry/lat_lng_bounds.hpp" +#include "geometry/lat_lng_quad.hpp" +#include "geometry/projected_meters.hpp" +#include "graphics/pointf.hpp" +#include "graphics/rectf.hpp" +#include "gson/json_array.hpp" +#include "gson/json_element.hpp" +#include "gson/json_object.hpp" +#include "gson/json_primitive.hpp" +#include "java_types.hpp" +#include "map_renderer.hpp" +#include "map_renderer_runnable.hpp" +#include "native_map_view.hpp" +#ifndef MBGL_MODULE_OFFLINE_DISABLE +#include "offline/offline_manager.hpp" +#include "offline/offline_region.hpp" +#include "offline/offline_region_definition.hpp" +#include "offline/offline_region_error.hpp" +#include "offline/offline_region_status.hpp" +#endif +#include "style/transition_options.hpp" +#include "style/layers/layer_manager.hpp" +#include "style/sources/source.hpp" +#include "style/light.hpp" +#include "style/formatted.hpp" +#include "style/formatted_section.hpp" +#ifndef MBGL_MODULE_SNAPSHOT_DISABLE +#include "snapshotter/map_snapshotter.hpp" +#include "snapshotter/map_snapshot.hpp" +#endif +#include "text/collator_jni.hpp" +#include "text/local_glyph_rasterizer_jni.hpp" +#include "text/format_number_jni.hpp" +#include "logger.hpp" + +namespace mbgl { +namespace android { + +void RegisterNativeHTTPRequest(JNIEnv&); + +void registerNatives(JavaVM *vm) { + theJVM = vm; + + jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); + + // For the DefaultFileSource + static mbgl::util::RunLoop mainRunLoop; + FileSource::registerNative(env); + + // Basic types + java::registerNatives(env); + java::util::registerNative(env); + PointF::registerNative(env); + RectF::registerNative(env); + + // GeoJSON + geojson::Feature::registerNative(env); + geojson::FeatureCollection::registerNative(env); + geojson::Geometry::registerNative(env); + geojson::GeometryCollection::registerNative(env); + geojson::LineString::registerNative(env); + geojson::MultiLineString::registerNative(env); + geojson::MultiPoint::registerNative(env); + geojson::MultiPolygon::registerNative(env); + geojson::Point::registerNative(env); + geojson::Polygon::registerNative(env); + + // Geometry + LatLng::registerNative(env); + LatLngBounds::registerNative(env); + LatLngQuad::registerNative(env); + ProjectedMeters::registerNative(env); + + // GSon + gson::JsonArray::registerNative(env); + gson::JsonElement::registerNative(env); + gson::JsonObject::registerNative(env); + gson::JsonPrimitive::registerNative(env); + + //Annotation + Marker::registerNative(env); + Polygon::registerNative(env); + Polyline::registerNative(env); + + // Map + MapRenderer::registerNative(env); + MapRendererRunnable::registerNative(env); + NativeMapView::registerNative(env); + + // Http + RegisterNativeHTTPRequest(env); + + // Bitmap + Bitmap::registerNative(env); + BitmapFactory::registerNative(env); + + // Style + TransitionOptions::registerNative(env); + LayerManagerAndroid::get()->registerNative(env); + Source::registerNative(env); + Light::registerNative(env); + Position::registerNative(env); + Formatted::registerNative(env); + FormattedSection::registerNative(env); + + // Map + CameraPosition::registerNative(env); + Image::registerNative(env); + + // Connectivity + ConnectivityListener::registerNative(env); + + // Offline +#ifndef MBGL_MODULE_OFFLINE_DISABLE + OfflineManager::registerNative(env); + OfflineRegion::registerNative(env); + OfflineRegionDefinition::registerNative(env); + OfflineTilePyramidRegionDefinition::registerNative(env); + OfflineGeometryRegionDefinition::registerNative(env); + OfflineRegionError::registerNative(env); + OfflineRegionStatus::registerNative(env); +#endif + + // Snapshotter +#ifndef MBGL_MODULE_SNAPSHOT_DISABLE + MapSnapshotter::registerNative(env); + MapSnapshot::registerNative(env); +#endif + + // text + LocalGlyphRasterizer::registerNative(env); + Locale::registerNative(env); + Collator::registerNative(env); + StringUtils::registerNative(env); + NumberFormat::registerNative(env); + + // Logger + Logger::registerNative(env); +} + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/jni_native.hpp b/platform/android/src/jni_native.hpp new file mode 100644 index 0000000000..a4c89d3036 --- /dev/null +++ b/platform/android/src/jni_native.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "jni.hpp" + +namespace mbgl { +namespace android { + +void registerNatives(JavaVM* vm); + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/main.cpp b/platform/android/src/main.cpp index 03a8288719..9b5c6c1974 100644 --- a/platform/android/src/main.cpp +++ b/platform/android/src/main.cpp @@ -1,4 +1,5 @@ #include "jni.hpp" +#include "jni_native.hpp" #include <jni/jni.hpp> extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *) { @@ -6,4 +7,3 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *) { mbgl::android::registerNatives(vm); return JNI_VERSION_1_6; } - diff --git a/platform/android/src/map/camera_position.cpp b/platform/android/src/map/camera_position.cpp index fcbec5639a..03aca79bda 100644 --- a/platform/android/src/map/camera_position.cpp +++ b/platform/android/src/map/camera_position.cpp @@ -4,9 +4,9 @@ namespace mbgl { namespace android { -jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mbgl::CameraOptions options) { +jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mbgl::CameraOptions options, float pixelRatio) { static auto& javaClass = jni::Class<CameraPosition>::Singleton(env); - static auto constructor = javaClass.GetConstructor<jni::Object<LatLng>, double, double, double>(env); + static auto constructor = javaClass.GetConstructor<jni::Object<LatLng>, double, double, double, jni::Array<jni::jdouble>>(env); // wrap LatLng values coming from core auto center = options.center.value(); @@ -25,21 +25,33 @@ jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mb // convert tilt, core ranges from [0 rad, 1,0472 rad], android ranges from 0 to 60 double tilt_degrees = options.pitch.value_or(0); - return javaClass.New(env, constructor, LatLng::New(env, center), options.zoom.value_or(0), tilt_degrees, bearing_degrees); + std::vector<jdouble> paddingVect; + auto insets = options.padding.value_or(EdgeInsets {0, 0, 0, 0}); + auto padding = jni::Array<jni::jdouble>::New(env, 4); + paddingVect.push_back(insets.left() * pixelRatio); + paddingVect.push_back(insets.top() * pixelRatio); + paddingVect.push_back(insets.right() * pixelRatio); + paddingVect.push_back(insets.bottom() * pixelRatio); + padding.SetRegion<std::vector<jni::jdouble>>(env, 0, paddingVect); + + return javaClass.New(env, constructor, LatLng::New(env, center), options.zoom.value_or(0), tilt_degrees, bearing_degrees, padding); } -mbgl::CameraOptions CameraPosition::getCameraOptions(jni::JNIEnv& env, const jni::Object<CameraPosition>& position) { +mbgl::CameraOptions CameraPosition::getCameraOptions(jni::JNIEnv& env, const jni::Object<CameraPosition>& position, float pixelRatio) { static auto& javaClass = jni::Class<CameraPosition>::Singleton(env); static auto bearing = javaClass.GetField<jni::jdouble>(env, "bearing"); static auto target = javaClass.GetField<jni::Object<LatLng>>(env, "target"); static auto tilt = javaClass.GetField<jni::jdouble>(env, "tilt"); static auto zoom = javaClass.GetField<jni::jdouble>(env, "zoom"); + static auto paddingField = javaClass.GetField<jni::Array<jni::jdouble>>(env, "padding"); + static auto padding = position.Get(env, paddingField); auto center = LatLng::getLatLng(env, position.Get(env, target)); return mbgl::CameraOptions { center, - {}, + EdgeInsets {padding.Get(env, 1) * pixelRatio, padding.Get(env, 0) * pixelRatio, + padding.Get(env, 3) * pixelRatio, padding.Get(env, 2) * pixelRatio}, {}, position.Get(env, zoom), position.Get(env, bearing), diff --git a/platform/android/src/map/camera_position.hpp b/platform/android/src/map/camera_position.hpp index 7579f9fed1..b677f04ea0 100644 --- a/platform/android/src/map/camera_position.hpp +++ b/platform/android/src/map/camera_position.hpp @@ -12,9 +12,9 @@ class CameraPosition : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/camera/CameraPosition"; }; - static jni::Local<jni::Object<CameraPosition>> New(jni::JNIEnv&, mbgl::CameraOptions); + static jni::Local<jni::Object<CameraPosition>> New(jni::JNIEnv&, mbgl::CameraOptions, float pixelRatio); - static mbgl::CameraOptions getCameraOptions(jni::JNIEnv&, const jni::Object<CameraPosition>&); + static mbgl::CameraOptions getCameraOptions(jni::JNIEnv&, const jni::Object<CameraPosition>&, float pixelRatio); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index 92444c404d..6be708b994 100644 --- a/platform/android/src/map_renderer.cpp +++ b/platform/android/src/map_renderer.cpp @@ -16,11 +16,9 @@ namespace android { MapRenderer::MapRenderer(jni::JNIEnv& _env, const jni::Object<MapRenderer>& obj, jni::jfloat pixelRatio_, - const jni::String& programCacheDir_, const jni::String& localIdeographFontFamily_) : javaPeer(_env, obj) , pixelRatio(pixelRatio_) - , programCacheDir(jni::Make<std::string>(_env, programCacheDir_)) , localIdeographFontFamily(localIdeographFontFamily_ ? jni::Make<std::string>(_env, localIdeographFontFamily_) : optional<std::string>{}) , mailbox(std::make_shared<Mailbox>(*this)) { } @@ -173,7 +171,7 @@ void MapRenderer::onSurfaceCreated(JNIEnv&) { // Create the new backend and renderer backend = std::make_unique<AndroidRendererBackend>(); - renderer = std::make_unique<Renderer>(*backend, pixelRatio, programCacheDir, localIdeographFontFamily); + renderer = std::make_unique<Renderer>(*backend, pixelRatio, localIdeographFontFamily); rendererRef = std::make_unique<ActorRef<Renderer>>(*renderer, mailbox); // Set the observer on the new Renderer implementation @@ -214,7 +212,7 @@ void MapRenderer::registerNative(jni::JNIEnv& env) { // Register the peer jni::RegisterNativePeer<MapRenderer>(env, javaClass, "nativePtr", - jni::MakePeer<MapRenderer, const jni::Object<MapRenderer>&, jni::jfloat, const jni::String&, const jni::String&>, + jni::MakePeer<MapRenderer, const jni::Object<MapRenderer>&, jni::jfloat, const jni::String&>, "nativeInitialize", "finalize", METHOD(&MapRenderer::render, "nativeRender"), METHOD(&MapRenderer::onRendererReset, "nativeReset"), diff --git a/platform/android/src/map_renderer.hpp b/platform/android/src/map_renderer.hpp index efbe55af7f..5a8ddeeb91 100644 --- a/platform/android/src/map_renderer.hpp +++ b/platform/android/src/map_renderer.hpp @@ -44,7 +44,6 @@ public: MapRenderer(jni::JNIEnv& _env, const jni::Object<MapRenderer>&, jni::jfloat pixelRatio, - const jni::String& programCacheDir, const jni::String& localIdeographFontFamily); ~MapRenderer() override; @@ -104,7 +103,6 @@ private: jni::WeakReference<jni::Object<MapRenderer>, jni::EnvAttachingDeleter> javaPeer; float pixelRatio; - std::string programCacheDir; optional<std::string> localIdeographFontFamily; std::shared_ptr<ThreadPool> threadPool; diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 47f2c6d9aa..8ef757de15 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -185,7 +185,7 @@ void NativeMapView::onWillStartRenderingFrame() { } } -void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode) { +void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode, bool) { assert(vm != nullptr); android::UniqueEnv _env = android::AttachEnv(); @@ -336,13 +336,17 @@ void NativeMapView::moveBy(jni::JNIEnv&, jni::jdouble dx, jni::jdouble dy, jni:: map->moveBy({dx, dy}, animationOptions); } -void NativeMapView::jumpTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jdouble pitch, jni::jdouble zoom) { +void NativeMapView::jumpTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding) { mbgl::CameraOptions options; if (bearing != -1) { options.bearing = bearing; } options.center = mbgl::LatLng(latitude, longitude); - options.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + options.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { options.pitch = pitch; } @@ -353,13 +357,17 @@ void NativeMapView::jumpTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble lati map->jumpTo(options); } -void NativeMapView::easeTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, jni::jboolean easing) { +void NativeMapView::easeTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding, jni::jboolean easing) { mbgl::CameraOptions cameraOptions; if (bearing != -1) { cameraOptions.bearing = bearing; } cameraOptions.center = mbgl::LatLng(latitude, longitude); - cameraOptions.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { cameraOptions.pitch = pitch; } @@ -377,13 +385,17 @@ void NativeMapView::easeTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble lati map->easeTo(cameraOptions, animationOptions); } -void NativeMapView::flyTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom) { +void NativeMapView::flyTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding) { mbgl::CameraOptions cameraOptions; if (bearing != -1) { cameraOptions.bearing = bearing; } cameraOptions.center = mbgl::LatLng(latitude, longitude); - cameraOptions.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { cameraOptions.pitch = pitch; } @@ -397,23 +409,29 @@ void NativeMapView::flyTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latit } jni::Local<jni::Object<LatLng>> NativeMapView::getLatLng(JNIEnv& env) { - return LatLng::New(env, *map->getCameraOptions(insets).center); + return LatLng::New(env, *map->getCameraOptions(mbgl::nullopt).center); } -void NativeMapView::setLatLng(jni::JNIEnv&, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration) { - map->easeTo(mbgl::CameraOptions().withCenter(mbgl::LatLng(latitude, longitude)).withPadding(insets), - mbgl::AnimationOptions{mbgl::Milliseconds(duration)}); +void NativeMapView::setLatLng(jni::JNIEnv& env, jni::jdouble latitude, jni::jdouble longitude, const jni::Array<jni::jdouble>& padding, jni::jlong duration) { + mbgl::CameraOptions cameraOptions; + cameraOptions.center = mbgl::LatLng(latitude, longitude); + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } + map->easeTo(cameraOptions, mbgl::AnimationOptions{mbgl::Milliseconds(duration)}); } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraForLatLngBounds(jni::JNIEnv& env, const jni::Object<LatLngBounds>& jBounds, double top, double left, double bottom, double right, double bearing, double tilt) { mbgl::EdgeInsets padding = {top, left, bottom, right}; - return CameraPosition::New(env, map->cameraForLatLngBounds(mbgl::android::LatLngBounds::getLatLngBounds(env, jBounds), padding, bearing, tilt)); + return CameraPosition::New(env, map->cameraForLatLngBounds(mbgl::android::LatLngBounds::getLatLngBounds(env, jBounds), padding, bearing, tilt), pixelRatio); } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraForGeometry(jni::JNIEnv& env, const jni::Object<geojson::Geometry>& jGeometry, double top, double left, double bottom, double right, double bearing, double tilt) { auto geometry = geojson::Geometry::convert(env, jGeometry); mbgl::EdgeInsets padding = {top, left, bottom, right}; - return CameraPosition::New(env, map->cameraForGeometry(geometry, padding, bearing, tilt)); + return CameraPosition::New(env, map->cameraForGeometry(geometry, padding, bearing, tilt), pixelRatio); } void NativeMapView::setReachability(jni::JNIEnv&, jni::jboolean reachable) { @@ -514,23 +532,6 @@ void NativeMapView::setVisibleCoordinateBounds(JNIEnv& env, const jni::Array<jni map->easeTo(cameraOptions, animationOptions); } -void NativeMapView::setContentPadding(JNIEnv&, float top, float left, float bottom, float right) { - insets = {top, left, bottom, right}; - // invalidate the camera position to consider the new padding - map->jumpTo(map->getCameraOptions(insets)); -} - -jni::Local<jni::Array<jni::jfloat>> NativeMapView::getContentPadding(JNIEnv& env) { - auto result = jni::Array<jni::jfloat>::New(env, 4); - std::vector<jfloat> vect; - vect.push_back(insets.top()); - vect.push_back(insets.left()); - vect.push_back(insets.bottom()); - vect.push_back(insets.right()); - result.SetRegion<std::vector<jni::jfloat>>(env, 0, vect); - return result; -} - void NativeMapView::scheduleSnapshot(jni::JNIEnv&) { mapRenderer.requestSnapshot([&](PremultipliedImage image) { auto _env = android::AttachEnv(); @@ -548,7 +549,7 @@ void NativeMapView::scheduleSnapshot(jni::JNIEnv&) { } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraPosition(jni::JNIEnv& env) { - return CameraPosition::New(env, map->getCameraOptions(insets)); + return CameraPosition::New(env, map->getCameraOptions(mbgl::nullopt), pixelRatio); } void NativeMapView::updateMarker(jni::JNIEnv& env, jni::jlong markerId, jni::jdouble lat, jni::jdouble lon, const jni::String& jid) { @@ -1098,8 +1099,6 @@ void NativeMapView::registerNative(jni::JNIEnv& env) { METHOD(&NativeMapView::getBearing, "nativeGetBearing"), METHOD(&NativeMapView::resetNorth, "nativeResetNorth"), METHOD(&NativeMapView::setVisibleCoordinateBounds, "nativeSetVisibleCoordinateBounds"), - METHOD(&NativeMapView::setContentPadding, "nativeSetContentPadding"), - METHOD(&NativeMapView::getContentPadding, "nativeGetContentPadding"), METHOD(&NativeMapView::scheduleSnapshot, "nativeTakeSnapshot"), METHOD(&NativeMapView::getCameraPosition, "nativeGetCameraPosition"), METHOD(&NativeMapView::updateMarker, "nativeUpdateMarker"), diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index 4ea4781b36..26567a003c 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -62,7 +62,7 @@ public: void onDidFinishLoadingMap() override; void onDidFailLoadingMap(MapLoadError, const std::string&) override; void onWillStartRenderingFrame() override; - void onDidFinishRenderingFrame(MapObserver::RenderMode) override; + void onDidFinishRenderingFrame(MapObserver::RenderMode, bool) override; void onWillStartRenderingMap() override; void onDidFinishRenderingMap(MapObserver::RenderMode) override; void onDidBecomeIdle() override; @@ -91,15 +91,15 @@ public: void moveBy(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); - void jumpTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble); + void jumpTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&); - void easeTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, jni::jboolean); + void easeTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&, jni::jboolean); - void flyTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble); + void flyTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&); jni::Local<jni::Object<LatLng>> getLatLng(JNIEnv&); - void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); + void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&, jni::jlong); jni::Local<jni::Object<CameraPosition>> getCameraForLatLngBounds(jni::JNIEnv&, const jni::Object<mbgl::android::LatLngBounds>&, double top, double left, double bottom, double right, double bearing, double tilt); @@ -139,10 +139,6 @@ public: void setVisibleCoordinateBounds(JNIEnv&, const jni::Array<jni::Object<LatLng>>&, const jni::Object<RectF>&, jni::jdouble, jni::jlong); - void setContentPadding(JNIEnv&, float, float, float, float); - - jni::Local<jni::Array<jni::jfloat>> getContentPadding(JNIEnv&); - void scheduleSnapshot(jni::JNIEnv&); jni::Local<jni::Object<CameraPosition>> getCameraPosition(jni::JNIEnv&); @@ -259,7 +255,6 @@ private: // Ensure these are initialised last std::unique_ptr<mbgl::Map> map; - mbgl::EdgeInsets insets; }; } // namespace android diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp index 2eca6595e1..0b38269ada 100644 --- a/platform/android/src/snapshotter/map_snapshotter.cpp +++ b/platform/android/src/snapshotter/map_snapshotter.cpp @@ -23,7 +23,6 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, const jni::Object<LatLngBounds>& region, const jni::Object<CameraPosition>& position, jni::jboolean _showLogo, - const jni::String& _programCacheDir, const jni::String& _localIdeographFontFamily) : javaPeer(_env, _obj) , pixelRatio(_pixelRatio) { @@ -39,7 +38,7 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, optional<mbgl::CameraOptions> cameraOptions; if (position) { - cameraOptions = CameraPosition::getCameraOptions(_env, position); + cameraOptions = CameraPosition::getCameraOptions(_env, position, pixelRatio); } optional<mbgl::LatLngBounds> bounds; @@ -61,7 +60,6 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, pixelRatio, cameraOptions, bounds, - jni::Make<std::string>(_env, _programCacheDir), _localIdeographFontFamily ? jni::Make<std::string>(_env, _localIdeographFontFamily) : optional<std::string>{}, @@ -126,7 +124,7 @@ void MapSnapshotter::setSize(JNIEnv&, jni::jint width, jni::jint height) { } void MapSnapshotter::setCameraPosition(JNIEnv& env, const jni::Object<CameraPosition>& position) { - auto options = CameraPosition::getCameraOptions(env, position); + auto options = CameraPosition::getCameraOptions(env, position, pixelRatio); snapshotter->setCameraOptions(options); } @@ -161,7 +159,7 @@ void MapSnapshotter::registerNative(jni::JNIEnv& env) { // Register the peer jni::RegisterNativePeer<MapSnapshotter>(env, javaClass, "nativePtr", - jni::MakePeer<MapSnapshotter, const jni::Object<MapSnapshotter>&, const jni::Object<FileSource>&, jni::jfloat, jni::jint, jni::jint, const jni::String&, const jni::String&, const jni::Object<LatLngBounds>&, const jni::Object<CameraPosition>&, jni::jboolean, const jni::String&, const jni::String&>, + jni::MakePeer<MapSnapshotter, const jni::Object<MapSnapshotter>&, const jni::Object<FileSource>&, jni::jfloat, jni::jint, jni::jint, const jni::String&, const jni::String&, const jni::Object<LatLngBounds>&, const jni::Object<CameraPosition>&, jni::jboolean, const jni::String&>, "nativeInitialize", "finalize", METHOD(&MapSnapshotter::setStyleUrl, "setStyleUrl"), diff --git a/platform/android/src/snapshotter/map_snapshotter.hpp b/platform/android/src/snapshotter/map_snapshotter.hpp index 791aa61d6a..608a4c855f 100644 --- a/platform/android/src/snapshotter/map_snapshotter.hpp +++ b/platform/android/src/snapshotter/map_snapshotter.hpp @@ -34,7 +34,6 @@ public: const jni::Object<LatLngBounds>& region, const jni::Object<CameraPosition>& position, jni::jboolean showLogo, - const jni::String& programCacheDir, const jni::String& localIdeographFontFamily); ~MapSnapshotter(); diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp index 8559720b2f..d38dbfa684 100644 --- a/platform/android/src/style/android_conversion.hpp +++ b/platform/android/src/style/android_conversion.hpp @@ -47,9 +47,18 @@ public: } template <class Fn> - static optional<Error> eachMember(const mbgl::android::Value&, Fn&&) { - // TODO - mbgl::Log::Warning(mbgl::Event::Android, "eachMember not implemented"); + static optional<Error> eachMember(const mbgl::android::Value& value, Fn&& fn) { + assert(value.isObject()); + mbgl::android::Value keys = value.keyArray(); + std::size_t length = arrayLength(keys); + for(std::size_t i = 0; i < length; ++i){ + const auto k = keys.get(i).toString(); + auto v = value.get(k.c_str()); + optional<Error> result = fn(k, std::move(v)); + if (result) { + return result; + } + } return {}; } diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index f916909687..2f04840729 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -63,6 +63,12 @@ namespace android { return Value(env, jni::Local<jni::Object<>>(env, member)); } + Value Value::keyArray() const{ + jni::jobject* set = jni::CallMethod<jni::jobject*>(env, value.get(), *java::Map::keySetMethodId); + jni::jobject* array = jni::CallMethod<jni::jobject*>(env, set, *java::Set::toArrayMethodId); + return Value(env, jni::Local<jni::Object<>>(env, array)); + } + int Value::getLength() const { auto array = (jni::jarray<jni::jobject>*) value.get(); return jni::GetArrayLength(env, *array); diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp index 0c702bb465..b507c5ed11 100644 --- a/platform/android/src/style/value.hpp +++ b/platform/android/src/style/value.hpp @@ -31,6 +31,7 @@ public: long toLong() const; bool toBool() const; Value get(const char* key) const; + Value keyArray() const; int getLength() const; Value get(const int index ) const; |