[android] add support for editing charging stations details

While here, uncluttered a little the charging station editor,
removing fields like the POI address which is basically irrelevant for
charging stations.

Signed-off-by: Séverin Lemaignan <severin@guakamole.org>
This commit is contained in:
Séverin Lemaignan
2025-09-29 17:53:11 +02:00
committed by x7z4w
parent 509ff4de72
commit d168855ef5
19 changed files with 899 additions and 197 deletions

View File

@@ -7,6 +7,7 @@
#include "indexer/cuisines.hpp"
#include "indexer/editable_map_object.hpp"
#include "indexer/feature_charge_sockets.hpp"
#include "indexer/feature_utils.hpp"
#include "indexer/validate_and_format_contacts.hpp"
@@ -94,6 +95,64 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeSetOpeningHo
g_editableMapObject.SetOpeningHours(jni::ToNativeString(env, value));
}
JNIEXPORT jobjectArray JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetChargeSockets(JNIEnv * env, jclass)
{
auto sockets = g_editableMapObject.GetChargeSockets();
jclass descClass = env->FindClass("app/organicmaps/sdk/bookmarks/data/ChargeSocketDescriptor");
jmethodID ctor = env->GetMethodID(descClass, "<init>", "(Ljava/lang/String;ID)V");
// Create a Java array
jobjectArray result = env->NewObjectArray(sockets.size(), descClass, nullptr);
for (size_t i = 0; i < sockets.size(); ++i)
{
auto const & s = sockets[i];
jstring jType = env->NewStringUTF(s.type.c_str());
jobject jDesc = env->NewObject(descClass, ctor, jType, (jint)s.count, (jdouble)s.power);
env->SetObjectArrayElement(result, i, jDesc);
env->DeleteLocalRef(jType);
env->DeleteLocalRef(jDesc);
}
return result;
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeSetChargeSockets(JNIEnv * env, jclass,
jobjectArray jSockets)
{
ChargeSocketsHelper chargeSockets;
jsize len = env->GetArrayLength(jSockets);
jclass descClass = env->FindClass("app/organicmaps/sdk/bookmarks/data/ChargeSocketDescriptor");
jfieldID fidType = env->GetFieldID(descClass, "type", "Ljava/lang/String;");
jfieldID fidCount = env->GetFieldID(descClass, "count", "I");
jfieldID fidPower = env->GetFieldID(descClass, "power", "D");
for (jsize i = 0; i < len; ++i)
{
jobject jDesc = env->GetObjectArrayElement(jSockets, i);
jstring jType = (jstring)env->GetObjectField(jDesc, fidType);
char const * cType = env->GetStringUTFChars(jType, nullptr);
jint count = env->GetIntField(jDesc, fidCount);
jdouble power = env->GetDoubleField(jDesc, fidPower);
chargeSockets.AddSocket(cType, static_cast<unsigned int>(count), static_cast<double>(power));
env->ReleaseStringUTFChars(jType, cType);
env->DeleteLocalRef(jType);
env->DeleteLocalRef(jDesc);
}
g_editableMapObject.SetChargeSockets(chargeSockets.ToString());
}
JNIEXPORT jstring JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeGetMetadata(JNIEnv * env, jclass, jint id)
{
auto const metaID = static_cast<osm::MapObject::MetadataID>(id);

View File

@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Size;
import androidx.annotation.WorkerThread;
import app.organicmaps.sdk.Framework;
import app.organicmaps.sdk.bookmarks.data.ChargeSocketDescriptor;
import app.organicmaps.sdk.bookmarks.data.Metadata;
import app.organicmaps.sdk.editor.data.FeatureCategory;
import app.organicmaps.sdk.editor.data.Language;
@@ -62,6 +63,8 @@ public final class Editor
public static native void nativeSetMetadata(int id, String value);
public static native String nativeGetOpeningHours();
public static native void nativeSetOpeningHours(String openingHours);
public static native ChargeSocketDescriptor[] nativeGetChargeSockets();
public static native void nativeSetChargeSockets(ChargeSocketDescriptor[] sockets);
public static String nativeGetPhone()
{
return nativeGetMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER.toInt());