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:
Adrian Cojocaru
2025-05-27 16:15:56 +03:00
committed by GitHub
parent 5ec8430fa3
commit 08eb760acd
66 changed files with 2773 additions and 75 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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"),

View File

@@ -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);