From b3f7936edd7338b10892dff7120c24875e262264 Mon Sep 17 00:00:00 2001 From: Sergey Magidovich Date: Tue, 21 Jun 2016 20:40:13 +0300 Subject: [PATCH] Language selection. --- .../jni/com/mapswithme/core/jni_helper.hpp | 22 ++++++++++++++----- .../jni/com/mapswithme/maps/editor/Editor.cpp | 17 +++++++++----- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/android/jni/com/mapswithme/core/jni_helper.hpp b/android/jni/com/mapswithme/core/jni_helper.hpp index 8384784437..7e26c3b292 100644 --- a/android/jni/com/mapswithme/core/jni_helper.hpp +++ b/android/jni/com/mapswithme/core/jni_helper.hpp @@ -9,6 +9,8 @@ #include "std/string.hpp" #include "std/shared_ptr.hpp" +#include "base/logging.hpp" + extern jclass g_mapObjectClazz; extern jclass g_bookmarkClazz; @@ -51,20 +53,28 @@ jobject GetNewParcelablePointD(JNIEnv * env, m2::PointD const & point); jobject GetNewPoint(JNIEnv * env, m2::PointD const & point); jobject GetNewPoint(JNIEnv * env, m2::PointI const & point); -template -jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, vector const & src, TToJavaFn && toJavaFn) +template +jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, TIt begin, TIt end, size_t const size, TToJavaFn && toJavaFn) { - size_t const size = src.size(); jobjectArray jArray = env->NewObjectArray((jint) size, clazz, 0); - for (size_t i = 0; i < size; i++) + size_t i = 0; + for (auto it = begin; it != end; ++it) { - TScopedLocalRef jItem(env, toJavaFn(env, src[i])); + TScopedLocalRef jItem(env, toJavaFn(env, *it)); env->SetObjectArrayElement(jArray, i, jItem.get()); + ++i; } return jArray; } + +template +jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, TContainer const & src, TToJavaFn && toJavaFn) +{ + return ToJavaArray(env, clazz, begin(src), end(src), src.size(), move(toJavaFn)); +} + jobjectArray ToJavaStringArray(JNIEnv * env, vector const & src); void DumpDalvikReferenceTables(); -} +} // namespace jni diff --git a/android/jni/com/mapswithme/maps/editor/Editor.cpp b/android/jni/com/mapswithme/maps/editor/Editor.cpp index b572988e2b..a9a91c9ac3 100644 --- a/android/jni/com/mapswithme/maps/editor/Editor.cpp +++ b/android/jni/com/mapswithme/maps/editor/Editor.cpp @@ -3,6 +3,8 @@ #include "com/mapswithme/core/jni_helper.hpp" #include "com/mapswithme/maps/Framework.hpp" +#include "coding/multilang_utf8_string.hpp" + #include "base/assert.hpp" #include "base/logging.hpp" #include "base/string_utils.hpp" @@ -344,13 +346,18 @@ Java_com_mapswithme_maps_editor_Editor_nativeGetNearbyStreets(JNIEnv * env, jcla JNIEXPORT jobjectArray JNICALL Java_com_mapswithme_maps_editor_Editor_nativeGetSupportedLanguages(JNIEnv * env, jclass clazz) { - // TODO (yunikkk) implement + using TLang = StringUtf8Multilang::Lang; //public Language(@NonNull String code, @NonNull String name) -// static jclass const langClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/editor/data/Language"); -// static jmethodID const langCtor = jni::GetConstructorID(env, langClass, "(Ljava/lang/String;Ljava/lang/String;)V"); + static jclass const langClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/editor/data/Language"); + static jmethodID const langCtor = jni::GetConstructorID(env, langClass, "(Ljava/lang/String;Ljava/lang/String;)V"); -// return jni::ToJavaArray(env, langClass, g_editableMapObject.GetBuildingLevels(), ); - return nullptr; + return jni::ToJavaArray(env, langClass, StringUtf8Multilang::GetSupportedLanguages(), + [](JNIEnv * env, TLang const & lang) + { + jni::TScopedLocalRef const code(env, jni::ToJavaString(env, lang.m_code)); + jni::TScopedLocalRef const name(env, jni::ToJavaString(env, lang.m_name)); + return env->NewObject(langClass, langCtor, code.get(), name.get()); + }); } JNIEXPORT jstring JNICALL