forked from organicmaps/organicmaps
Cuisine UI speed improvement (#2924)
* Moved osm::Cuisines::Instance() out of the loop. Signed-off-by: S. Kozyr <s.trump@gmail.com> * Reverted changes in Java_com_mapswithme_util_StringUtils_nativeFilterContainsNormalized Added new function `Editor.nativeFilterCuisinesKeys`. Signed-off-by: S. Kozyr <s.trump@gmail.com> * Fixed JNI binding Signed-off-by: S. Kozyr <s.trump@gmail.com> * Fixed JNI binding Signed-off-by: S. Kozyr <s.trump@gmail.com> * Fixed according to PR comments Signed-off-by: S. Kozyr <s.trump@gmail.com> * Simplified `Editor.nativeFilterCuisinesKeys(...)` function. Signed-off-by: S. Kozyr <s.trump@gmail.com>
This commit is contained in:
parent
3b934161a5
commit
cef442fac8
4 changed files with 29 additions and 8 deletions
|
@ -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<std::string> 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<std::string> 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<jstring>(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<std::string> 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<jstring>(env->GetObjectArrayElement(jKeys, i))));
|
||||
g_editableMapObject.SetCuisines(cuisines);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<std::string> 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<jstring>(env->GetObjectArrayElement(src, i)));
|
||||
if (search::ContainsNormalized(str, substr))
|
||||
filtered.push_back(str);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ public class CuisineAdapter extends RecyclerView.Adapter<CuisineAdapter.ViewHold
|
|||
return;
|
||||
mFilter = filter;
|
||||
|
||||
final String[] filteredKeys = StringUtils.nativeFilterContainsNormalized(Editor.nativeGetCuisines(), filter);
|
||||
final String[] filteredKeys = Editor.nativeFilterCuisinesKeys(filter.trim());
|
||||
final String[] filteredValues = Editor.nativeTranslateCuisines(filteredKeys);
|
||||
|
||||
mItems.clear();
|
||||
|
|
|
@ -184,6 +184,7 @@ public final class Editor
|
|||
* @return selected cuisines keys.
|
||||
*/
|
||||
public static native String[] nativeGetSelectedCuisines();
|
||||
public static native String[] nativeFilterCuisinesKeys(String substr);
|
||||
public static native String[] nativeTranslateCuisines(String[] keys);
|
||||
public static native void nativeSetSelectedCuisines(String [] keys);
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue