Language selection.

This commit is contained in:
Sergey Magidovich 2016-06-21 20:40:13 +03:00
parent 51e63c99bd
commit b3f7936edd
2 changed files with 28 additions and 11 deletions

View file

@ -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<typename TValue, typename TToJavaFn>
jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, vector<TValue> const & src, TToJavaFn && toJavaFn)
template<typename TIt, typename TToJavaFn>
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<typename TContainer, typename TToJavaFn>
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<string> const & src);
void DumpDalvikReferenceTables();
}
} // namespace jni

View file

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