Add action journal (#3409)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bart Louwers <bart@emeel.net>
This commit is contained in:
@@ -110,6 +110,8 @@ add_library(maplibre SHARED
|
||||
${PROJECT_SOURCE_DIR}/map_renderer_runnable.hpp
|
||||
${PROJECT_SOURCE_DIR}/native_map_view.cpp
|
||||
${PROJECT_SOURCE_DIR}/native_map_view.hpp
|
||||
${PROJECT_SOURCE_DIR}/native_map_options.cpp
|
||||
${PROJECT_SOURCE_DIR}/native_map_options.hpp
|
||||
${PROJECT_SOURCE_DIR}/offline/offline_manager.cpp
|
||||
${PROJECT_SOURCE_DIR}/offline/offline_manager.hpp
|
||||
${PROJECT_SOURCE_DIR}/offline/offline_region.cpp
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "map_renderer_runnable.hpp"
|
||||
#include "maplibre.hpp"
|
||||
#include "native_map_view.hpp"
|
||||
#include "native_map_options.hpp"
|
||||
#include "util/tile_server_options.hpp"
|
||||
#ifndef MBGL_MODULE_OFFLINE_DISABLE
|
||||
#include "offline/offline_manager.hpp"
|
||||
@@ -109,6 +110,7 @@ void registerNatives(JavaVM* vm) {
|
||||
MapRenderer::registerNative(env);
|
||||
MapRendererRunnable::registerNative(env);
|
||||
NativeMapView::registerNative(env);
|
||||
NativeMapOptions::registerNative(env);
|
||||
|
||||
// Http
|
||||
RegisterNativeHTTPRequest(env);
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#include "native_map_options.hpp"
|
||||
|
||||
namespace mbgl {
|
||||
namespace android {
|
||||
|
||||
void NativeMapOptions::registerNative(jni::JNIEnv &env) {
|
||||
jni::Class<NativeMapOptions>::Singleton(env);
|
||||
}
|
||||
|
||||
NativeMapOptions::NativeMapOptions(jni::JNIEnv &_env, const jni::Object<NativeMapOptions> &_obj) {}
|
||||
|
||||
NativeMapOptions::~NativeMapOptions() {}
|
||||
|
||||
util::ActionJournalOptions NativeMapOptions::getActionJournalOptions(jni::JNIEnv &env,
|
||||
const jni::Object<NativeMapOptions> &obj) {
|
||||
auto &javaClass = jni::Class<NativeMapOptions>::Singleton(env);
|
||||
|
||||
auto enabledField = javaClass.GetField<jni::jboolean>(env, "actionJournalEnabled");
|
||||
auto pathField = javaClass.GetField<jni::String>(env, "actionJournalPath");
|
||||
auto logFileSizeField = javaClass.GetField<jni::jlong>(env, "actionJournalLogFileSize");
|
||||
auto logFileCountField = javaClass.GetField<jni::jlong>(env, "actionJournalLogFileCount");
|
||||
|
||||
return util::ActionJournalOptions()
|
||||
.enable(obj.Get(env, enabledField))
|
||||
.withPath(jni::Make<std::string>(env, obj.Get(env, pathField)))
|
||||
.withLogFileSize(obj.Get(env, logFileSizeField))
|
||||
.withLogFileCount(obj.Get(env, logFileCountField));
|
||||
}
|
||||
|
||||
float NativeMapOptions::pixelRatio(jni::JNIEnv &env, const jni::Object<NativeMapOptions> &obj) {
|
||||
auto &javaClass = jni::Class<NativeMapOptions>::Singleton(env);
|
||||
auto pixelRatioField = javaClass.GetField<float>(env, "pixelRatio");
|
||||
return obj.Get(env, pixelRatioField);
|
||||
}
|
||||
|
||||
bool NativeMapOptions::crossSourceCollisions(jni::JNIEnv &env, const jni::Object<NativeMapOptions> &obj) {
|
||||
auto &javaClass = jni::Class<NativeMapOptions>::Singleton(env);
|
||||
auto crossSourceCollisionsField = javaClass.GetField<jni::jboolean>(env, "crossSourceCollisions");
|
||||
return obj.Get(env, crossSourceCollisionsField);
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
} // namespace mbgl
|
||||
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <jni.h>
|
||||
#include <jni/jni.hpp>
|
||||
#include <mbgl/util/action_journal_options.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
namespace android {
|
||||
|
||||
class NativeMapOptions {
|
||||
public:
|
||||
static constexpr auto Name() { return "org/maplibre/android/maps/NativeMapOptions"; };
|
||||
|
||||
static void registerNative(jni::JNIEnv&);
|
||||
|
||||
NativeMapOptions(jni::JNIEnv&, const jni::Object<NativeMapOptions>&);
|
||||
virtual ~NativeMapOptions();
|
||||
|
||||
static util::ActionJournalOptions getActionJournalOptions(jni::JNIEnv&, const jni::Object<NativeMapOptions>&);
|
||||
static float pixelRatio(jni::JNIEnv&, const jni::Object<NativeMapOptions>&);
|
||||
static bool crossSourceCollisions(jni::JNIEnv&, const jni::Object<NativeMapOptions>&);
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
} // namespace mbgl
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <mbgl/map/map.hpp>
|
||||
#include <mbgl/map/map_options.hpp>
|
||||
#include <mbgl/math/minmax.hpp>
|
||||
#include <mbgl/util/action_journal.hpp>
|
||||
#include <mbgl/util/constants.hpp>
|
||||
#include <mbgl/util/event.hpp>
|
||||
#include <mbgl/util/exception.hpp>
|
||||
@@ -62,11 +63,10 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
|
||||
const jni::Object<NativeMapView>& _obj,
|
||||
const jni::Object<FileSource>& jFileSource,
|
||||
const jni::Object<MapRenderer>& jMapRenderer,
|
||||
jni::jfloat pixelRatio_,
|
||||
jni::jboolean crossSourceCollisions_)
|
||||
const jni::Object<NativeMapOptions>& jNativeMapOptions)
|
||||
: javaPeer(_env, _obj),
|
||||
mapRenderer(MapRenderer::getNativePeer(_env, jMapRenderer)),
|
||||
pixelRatio(pixelRatio_) {
|
||||
pixelRatio(NativeMapOptions::pixelRatio(_env, jNativeMapOptions)) {
|
||||
// Get a reference to the JavaVM for callbacks
|
||||
if (_env.GetJavaVM(&vm) < 0) {
|
||||
_env.ExceptionDescribe();
|
||||
@@ -83,14 +83,16 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
|
||||
.withPixelRatio(pixelRatio)
|
||||
.withConstrainMode(ConstrainMode::HeightOnly)
|
||||
.withViewportMode(ViewportMode::Default)
|
||||
.withCrossSourceCollisions(crossSourceCollisions_);
|
||||
.withCrossSourceCollisions(NativeMapOptions::crossSourceCollisions(_env, jNativeMapOptions));
|
||||
|
||||
// Create the core map
|
||||
map = std::make_unique<mbgl::Map>(*rendererFrontend,
|
||||
*this,
|
||||
options,
|
||||
mbgl::android::FileSource::getSharedResourceOptions(_env, jFileSource),
|
||||
mbgl::android::FileSource::getSharedClientOptions(_env, jFileSource));
|
||||
map = std::make_unique<mbgl::Map>(
|
||||
*rendererFrontend,
|
||||
*this,
|
||||
options,
|
||||
mbgl::android::FileSource::getSharedResourceOptions(_env, jFileSource),
|
||||
mbgl::android::FileSource::getSharedClientOptions(_env, jFileSource),
|
||||
mbgl::android::NativeMapOptions::getActionJournalOptions(_env, jNativeMapOptions));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -693,6 +695,47 @@ jni::jboolean NativeMapView::getDebug(JNIEnv&) {
|
||||
return map->getDebug() != DebugOptions::NoDebug;
|
||||
}
|
||||
|
||||
jni::Local<jni::Array<jni::String>> NativeMapView::getActionJournalLogFiles(JNIEnv& env) {
|
||||
const auto& actionJournal = map->getActionJournal();
|
||||
if (!actionJournal) {
|
||||
return jni::Local<jni::Array<jni::String>>();
|
||||
}
|
||||
|
||||
const auto& files = actionJournal->getLogFiles();
|
||||
auto jFiles = jni::Array<jni::String>::New(env, files.size());
|
||||
|
||||
uint32_t index = 0;
|
||||
for (const auto& file : files) {
|
||||
jFiles.Set(env, index++, jni::Make<jni::String>(env, file));
|
||||
}
|
||||
|
||||
return jFiles;
|
||||
}
|
||||
|
||||
jni::Local<jni::Array<jni::String>> NativeMapView::getActionJournalLog(JNIEnv& env) {
|
||||
const auto& actionJournal = map->getActionJournal();
|
||||
if (!actionJournal) {
|
||||
return jni::Local<jni::Array<jni::String>>();
|
||||
}
|
||||
|
||||
const auto& events = actionJournal->getLog();
|
||||
auto jEvents = jni::Array<jni::String>::New(env, events.size());
|
||||
|
||||
uint32_t index = 0;
|
||||
for (const auto& event : events) {
|
||||
jEvents.Set(env, index++, jni::Make<jni::String>(env, event));
|
||||
}
|
||||
|
||||
return jEvents;
|
||||
}
|
||||
|
||||
void NativeMapView::clearActionJournalLog(JNIEnv&) {
|
||||
const auto& actionJournal = map->getActionJournal();
|
||||
if (actionJournal) {
|
||||
actionJournal->clearLog();
|
||||
}
|
||||
}
|
||||
|
||||
jni::jboolean NativeMapView::isFullyLoaded(JNIEnv&) {
|
||||
return map->isFullyLoaded();
|
||||
}
|
||||
@@ -1246,8 +1289,7 @@ void NativeMapView::registerNative(jni::JNIEnv& env) {
|
||||
const jni::Object<NativeMapView>&,
|
||||
const jni::Object<FileSource>&,
|
||||
const jni::Object<MapRenderer>&,
|
||||
jni::jfloat,
|
||||
jni::jboolean>,
|
||||
const jni::Object<NativeMapOptions>&>,
|
||||
"nativeInitialize",
|
||||
"nativeDestroy",
|
||||
METHOD(&NativeMapView::resizeView, "nativeResizeView"),
|
||||
@@ -1292,6 +1334,9 @@ void NativeMapView::registerNative(jni::JNIEnv& env) {
|
||||
METHOD(&NativeMapView::addMarkers, "nativeAddMarkers"),
|
||||
METHOD(&NativeMapView::setDebug, "nativeSetDebug"),
|
||||
METHOD(&NativeMapView::getDebug, "nativeGetDebug"),
|
||||
METHOD(&NativeMapView::getActionJournalLogFiles, "nativeGetActionJournalLogFiles"),
|
||||
METHOD(&NativeMapView::getActionJournalLog, "nativeGetActionJournalLog"),
|
||||
METHOD(&NativeMapView::clearActionJournalLog, "nativeClearActionJournalLog"),
|
||||
METHOD(&NativeMapView::isFullyLoaded, "nativeIsFullyLoaded"),
|
||||
METHOD(&NativeMapView::onLowMemory, "nativeOnLowMemory"),
|
||||
METHOD(&NativeMapView::getMetersPerPixelAtLatitude, "nativeGetMetersPerPixelAtLatitude"),
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "map/camera_position.hpp"
|
||||
#include "map/image.hpp"
|
||||
#include "style/light.hpp"
|
||||
#include "native_map_options.hpp"
|
||||
#include "bitmap.hpp"
|
||||
|
||||
#include <exception>
|
||||
@@ -49,8 +50,7 @@ public:
|
||||
const jni::Object<NativeMapView>&,
|
||||
const jni::Object<FileSource>&,
|
||||
const jni::Object<MapRenderer>&,
|
||||
jni::jfloat,
|
||||
jni::jboolean);
|
||||
const jni::Object<NativeMapOptions>&);
|
||||
|
||||
virtual ~NativeMapView();
|
||||
|
||||
@@ -199,6 +199,12 @@ public:
|
||||
|
||||
jni::jboolean getDebug(JNIEnv&);
|
||||
|
||||
jni::Local<jni::Array<jni::String>> getActionJournalLogFiles(JNIEnv&);
|
||||
|
||||
jni::Local<jni::Array<jni::String>> getActionJournalLog(JNIEnv&);
|
||||
|
||||
void clearActionJournalLog(JNIEnv&);
|
||||
|
||||
jni::jboolean isFullyLoaded(JNIEnv&);
|
||||
|
||||
jni::jdouble getMetersPerPixelAtLatitude(JNIEnv&, jni::jdouble, jni::jdouble);
|
||||
|
||||
Reference in New Issue
Block a user