diff --git a/android/jni/com/mapswithme/maps/editor/Editor.cpp b/android/jni/com/mapswithme/maps/editor/Editor.cpp index 29a93ad17e..1305bd0a9f 100644 --- a/android/jni/com/mapswithme/maps/editor/Editor.cpp +++ b/android/jni/com/mapswithme/maps/editor/Editor.cpp @@ -567,16 +567,37 @@ Java_com_mapswithme_maps_editor_Editor_nativeGetSelectedCuisines(JNIEnv * env, j return jni::ToJavaStringArray(env, g_editableMapObject.GetCuisines()); } +JNIEXPORT jobjectArray JNICALL +Java_com_mapswithme_maps_editor_Editor_nativeFilterCuisinesKeys(JNIEnv * env, jclass thiz, jstring jSubstr) +{ + std::string const substr = jni::ToNativeString(env, jSubstr); + bool const noFilter = substr.length() == 0; + osm::AllCuisines const & cuisines = osm::Cuisines::Instance().AllSupportedCuisines(); + std::vector keys; + keys.reserve(cuisines.size()); + + for (TCuisine const & cuisine : cuisines) + { + std::string const & key = cuisine.first; + std::string const & label = cuisine.second; + if (noFilter || search::ContainsNormalized(key, substr) || search::ContainsNormalized(label, substr)) + keys.push_back(key); + } + + return jni::ToJavaStringArray(env, keys); +} + JNIEXPORT jobjectArray JNICALL Java_com_mapswithme_maps_editor_Editor_nativeTranslateCuisines(JNIEnv * env, jclass clazz, jobjectArray jKeys) { int const length = env->GetArrayLength(jKeys); + auto const & cuisines = osm::Cuisines::Instance(); std::vector translations; translations.reserve(length); for (int i = 0; i < length; i++) { - std::string const & key = jni::ToNativeString(env, (jstring) env->GetObjectArrayElement(jKeys, i)); - translations.push_back(osm::Cuisines::Instance().Translate(key)); + std::string const key = jni::ToNativeString(env, static_cast(env->GetObjectArrayElement(jKeys, i))); + translations.push_back(cuisines.Translate(key)); } return jni::ToJavaStringArray(env, translations); } @@ -588,7 +609,7 @@ Java_com_mapswithme_maps_editor_Editor_nativeSetSelectedCuisines(JNIEnv * env, j std::vector cuisines; cuisines.reserve(length); for (int i = 0; i < length; i++) - cuisines.push_back(jni::ToNativeString(env, (jstring) env->GetObjectArrayElement(jKeys, i))); + cuisines.push_back(jni::ToNativeString(env, static_cast(env->GetObjectArrayElement(jKeys, i)))); g_editableMapObject.SetCuisines(cuisines); } diff --git a/android/jni/com/mapswithme/util/StringUtils.cpp b/android/jni/com/mapswithme/util/StringUtils.cpp index 4f48ffbcb2..69a6a47d3b 100644 --- a/android/jni/com/mapswithme/util/StringUtils.cpp +++ b/android/jni/com/mapswithme/util/StringUtils.cpp @@ -37,15 +37,14 @@ Java_com_mapswithme_util_StringUtils_nativeContainsNormalized(JNIEnv * env, jcla JNIEXPORT jobjectArray JNICALL Java_com_mapswithme_util_StringUtils_nativeFilterContainsNormalized(JNIEnv * env, jclass thiz, jobjectArray src, jstring jSubstr) { - std::string substr = jni::ToNativeString(env, jSubstr); + std::string const substr = jni::ToNativeString(env, jSubstr); int const length = env->GetArrayLength(src); - auto const & cuisines = osm::Cuisines::Instance(); std::vector filtered; filtered.reserve(length); for (int i = 0; i < length; i++) { - std::string str = jni::ToNativeString(env, (jstring) env->GetObjectArrayElement(src, i)); - if (search::ContainsNormalized(str, substr) || search::ContainsNormalized(cuisines.Translate(str), substr)) + std::string const str = jni::ToNativeString(env, static_cast(env->GetObjectArrayElement(src, i))); + if (search::ContainsNormalized(str, substr)) filtered.push_back(str); } diff --git a/android/src/com/mapswithme/maps/editor/CuisineAdapter.java b/android/src/com/mapswithme/maps/editor/CuisineAdapter.java index 497fdebe50..3cfb2107bb 100644 --- a/android/src/com/mapswithme/maps/editor/CuisineAdapter.java +++ b/android/src/com/mapswithme/maps/editor/CuisineAdapter.java @@ -66,7 +66,7 @@ public class CuisineAdapter extends RecyclerView.Adapter