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:
Sergiy Kozyr 2022-07-09 01:31:40 +03:00 committed by GitHub
parent 3b934161a5
commit cef442fac8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 8 deletions

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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();

View file

@ -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);
/**