mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-23 22:53:43 +00:00
[android] Load predefined colors from core
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
committed by
Konstantin Pastbin
parent
ebc5370052
commit
d9335c0b6c
@@ -43,6 +43,8 @@ set(SRC
|
||||
app/organicmaps/sdk/core/jni_java_methods.cpp
|
||||
app/organicmaps/sdk/core/logging.cpp
|
||||
app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp
|
||||
app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp
|
||||
app/organicmaps/sdk/bookmarks/data/PredefinedColors.hpp
|
||||
app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp
|
||||
app/organicmaps/sdk/editor/Editor.cpp
|
||||
app/organicmaps/sdk/editor/OpeningHours.cpp
|
||||
|
||||
@@ -532,16 +532,10 @@ Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetTrack(
|
||||
|
||||
ASSERT(nTrack, ("Track must not be null with id:)", trackId));
|
||||
|
||||
dp::Color nColor = nTrack->GetColor(0);
|
||||
|
||||
jint androidColor = shift(nColor.GetAlpha(), 24) +
|
||||
shift(nColor.GetRed(), 16) +
|
||||
shift(nColor.GetGreen(), 8) +
|
||||
nColor.GetBlue();
|
||||
|
||||
return env->NewObject(trackClazz, cId,
|
||||
trackId, static_cast<jlong>(nTrack->GetGroupId()), jni::ToJavaString(env, nTrack->GetName()),
|
||||
ToJavaDistance(env, platform::Distance::CreateFormatted(nTrack->GetLengthMeters())), androidColor);
|
||||
return env->NewObject(trackClazz, cId, trackId, static_cast<jlong>(nTrack->GetGroupId()),
|
||||
jni::ToJavaString(env, nTrack->GetName()),
|
||||
ToJavaDistance(env, platform::Distance::CreateFormatted(nTrack->GetLengthMeters())),
|
||||
nTrack->GetColor(0).GetARGB());
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#include "PredefinedColors.hpp"
|
||||
|
||||
#include "kml/types.hpp"
|
||||
|
||||
#include <array>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
JNIEXPORT jintArray JNICALL
|
||||
Java_app_organicmaps_sdk_bookmarks_data_PredefinedColors_nativeGetPredefinedColors(JNIEnv * env, jclass)
|
||||
{
|
||||
std::array<jint, static_cast<size_t>(kml::PredefinedColor::Count)> colors{};
|
||||
for (size_t i = 0; i < static_cast<size_t>(kml::PredefinedColor::Count); ++i)
|
||||
colors[i] = static_cast<jint>(kml::ColorFromPredefinedColor(static_cast<kml::PredefinedColor>(i)).GetARGB());
|
||||
|
||||
jintArray jColors = env->NewIntArray(colors.size());
|
||||
env->SetIntArrayRegion(jColors, 0, static_cast<jsize>(colors.size()), colors.data());
|
||||
return jColors;
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
JNINativeMethod const methods[] = {
|
||||
{"nativeGetPredefinedColors", "()[I",
|
||||
reinterpret_cast<void *>(&Java_app_organicmaps_sdk_bookmarks_data_PredefinedColors_nativeGetPredefinedColors)},
|
||||
};
|
||||
}
|
||||
|
||||
namespace predefined_colors
|
||||
{
|
||||
jint registerNativeMethods(JNIEnv * env)
|
||||
{
|
||||
jclass clazz = env->FindClass("app/organicmaps/sdk/bookmarks/data/PredefinedColors");
|
||||
if (clazz == nullptr)
|
||||
return JNI_ERR;
|
||||
|
||||
return env->RegisterNatives(clazz, methods, std::size(methods));
|
||||
}
|
||||
} // namespace predefined_colors
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
namespace predefined_colors
|
||||
{
|
||||
jint registerNativeMethods(JNIEnv * env);
|
||||
}
|
||||
@@ -1,11 +1,13 @@
|
||||
#include "jni_helper.hpp"
|
||||
#include "logging.hpp"
|
||||
#include "ScopedLocalRef.hpp"
|
||||
#include "logging.hpp"
|
||||
|
||||
#include "base/assert.hpp"
|
||||
#include "base/exception.hpp"
|
||||
#include "base/string_utils.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/bookmarks/data/PredefinedColors.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
static JavaVM * g_jvm = 0;
|
||||
@@ -31,21 +33,21 @@ extern "C"
|
||||
{
|
||||
int __system_property_get(char const * name, char * value);
|
||||
|
||||
static bool IsAndroidLowerThan7()
|
||||
static bool IsAndroidApiLowerThan(int apiLevel)
|
||||
{
|
||||
char value[92] = { 0 };
|
||||
if (__system_property_get("ro.build.version.sdk", value) < 1)
|
||||
return false;
|
||||
const int apiLevel = atoi(value);
|
||||
if (apiLevel > 0 && apiLevel < 24)
|
||||
int const deviceApiLevel = atoi(value);
|
||||
if (deviceApiLevel > 0 && deviceApiLevel < apiLevel)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool const g_isAndroidLowerThan7 = IsAndroidLowerThan7();
|
||||
static bool const g_isAndroidLowerThan12 = IsAndroidApiLowerThan(30);
|
||||
static bool const g_isAndroidLowerThan7 = g_isAndroidLowerThan12 && IsAndroidApiLowerThan(24);
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
JNI_OnLoad(JavaVM * jvm, void *)
|
||||
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * jvm, void *)
|
||||
{
|
||||
g_jvm = jvm;
|
||||
jni::InitSystemLog();
|
||||
@@ -64,6 +66,12 @@ JNI_OnLoad(JavaVM * jvm, void *)
|
||||
g_networkPolicyClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/util/NetworkPolicy");
|
||||
g_elevationInfoClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/bookmarks/data/ElevationInfo");
|
||||
|
||||
if (g_isAndroidLowerThan12)
|
||||
{
|
||||
if (predefined_colors::registerNativeMethods(env) != JNI_OK)
|
||||
return JNI_ERR;
|
||||
}
|
||||
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
|
||||
@@ -84,7 +92,7 @@ JNI_OnUnload(JavaVM *, void *)
|
||||
env->DeleteGlobalRef(g_networkPolicyClazz);
|
||||
env->DeleteGlobalRef(g_elevationInfoClazz);
|
||||
}
|
||||
} // extern "C"
|
||||
} // extern "C"
|
||||
|
||||
namespace jni
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user