diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2018-07-27 14:00:55 +0200 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2018-09-11 12:58:56 +0200 |
commit | 6e171a62a9cc07ddbb0765e3021e46ebd60313df (patch) | |
tree | c77d834b170124d9cb9f8221ee11d61577d82d95 /platform/android/src | |
parent | 2fccdecfb1ae720682276c0342e1c3902d8c9873 (diff) | |
download | qtlocation-mapboxgl-6e171a62a9cc07ddbb0765e3021e46ebd60313df.tar.gz |
[android] - replace platform default implementation using nunicode for uppercasing an lowercasing with an Android specific String.java equivalent
Diffstat (limited to 'platform/android/src')
-rwxr-xr-x | platform/android/src/jni.cpp | 1 | ||||
-rw-r--r-- | platform/android/src/string_util.cpp | 25 | ||||
-rw-r--r-- | platform/android/src/text/collator.cpp | 12 | ||||
-rw-r--r-- | platform/android/src/text/collator_jni.hpp | 11 | ||||
-rw-r--r-- | platform/android/src/unaccent.cpp | 18 |
5 files changed, 66 insertions, 1 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index abea7f4502..e323dc83b3 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -187,6 +187,7 @@ void registerNatives(JavaVM *vm) { LocalGlyphRasterizer::registerNative(env); Locale::registerNative(env); Collator::registerNative(env); + StringUtils::registerNative(env); // Logger Logger::registerNative(env); diff --git a/platform/android/src/string_util.cpp b/platform/android/src/string_util.cpp new file mode 100644 index 0000000000..f02155caff --- /dev/null +++ b/platform/android/src/string_util.cpp @@ -0,0 +1,25 @@ +#include <mbgl/util/platform.hpp> +#include "attach_env.hpp" +#include <jni/jni.hpp> + +namespace mbgl { +namespace platform { + +std::string uppercase(const std::string& str) { + auto env{ android::AttachEnv() }; + jni::Local<jni::String> value = jni::Make<jni::String>(*env, str.c_str()); + static auto toUpperCase = jni::Class<jni::StringTag>::Singleton(*env).GetMethod<jni::String()>(*env, "toUpperCase"); + auto result = value.Call(*env, toUpperCase); + return jni::Make<std::string>(*env, result); +} + +std::string lowercase(const std::string& str) { + auto env{ android::AttachEnv() }; + jni::Local<jni::String> value = jni::Make<jni::String>(*env, str.c_str()); + static auto toLowerCase = jni::Class<jni::StringTag>::Singleton(*env).GetMethod<jni::String()>(*env, "toLowerCase"); + auto result = value.Call(*env, toLowerCase); + return jni::Make<std::string>(*env, result); +} + +} // namespace platform +} // namespace mbgl diff --git a/platform/android/src/text/collator.cpp b/platform/android/src/text/collator.cpp index 04da53832a..381851eff2 100644 --- a/platform/android/src/text/collator.cpp +++ b/platform/android/src/text/collator.cpp @@ -30,10 +30,20 @@ void Collator::setStrength(jni::JNIEnv& env, const jni::Object<Collator>& collat jni::jint Collator::compare(jni::JNIEnv& env, const jni::Object<Collator>& collator, const jni::String& lhs, const jni::String& rhs) { static auto& javaClass = jni::Class<Collator>::Singleton(env); - auto static method = javaClass.GetMethod<jni::jint (jni::String, jni::String)>(env, "compare"); + static auto method = javaClass.GetMethod<jni::jint (jni::String, jni::String)>(env, "compare"); return collator.Call(env, method, lhs, rhs); } +void StringUtils::registerNative(jni::JNIEnv& env) { + jni::Class<StringUtils>::Singleton(env); +} + +jni::Local<jni::String> StringUtils::unaccent(jni::JNIEnv& env, const jni::String& value) { + static auto& javaClass = jni::Class<StringUtils>::Singleton(env); + static auto method = javaClass.GetStaticMethod<jni::String (jni::String)>(env, "unaccent"); + return javaClass.Call(env, method, value); +} + void Locale::registerNative(jni::JNIEnv& env) { jni::Class<Locale>::Singleton(env); } diff --git a/platform/android/src/text/collator_jni.hpp b/platform/android/src/text/collator_jni.hpp index e5e82c34fd..dd3f845662 100644 --- a/platform/android/src/text/collator_jni.hpp +++ b/platform/android/src/text/collator_jni.hpp @@ -49,5 +49,16 @@ public: static void registerNative(jni::JNIEnv&); }; + +class StringUtils { +public: + static constexpr auto Name() { return "com/mapbox/mapboxsdk/utils/StringUtils"; }; + + static jni::Local<jni::String> unaccent(jni::JNIEnv&, const jni::String&); + + + static void registerNative(jni::JNIEnv&); +}; + } // namespace android } // namespace mbgl diff --git a/platform/android/src/unaccent.cpp b/platform/android/src/unaccent.cpp new file mode 100644 index 0000000000..bc2ec354d6 --- /dev/null +++ b/platform/android/src/unaccent.cpp @@ -0,0 +1,18 @@ +#include <unaccent.hpp> +#include <string> +#include "attach_env.hpp" +#include "text/collator_jni.hpp" +#include <jni/jni.hpp> + +namespace mbgl { +namespace platform { + +std::string unaccent(const std::string& str) { + android::UniqueEnv env = android::AttachEnv(); + jni::Local<jni::String> input = jni::Make<jni::String>(*env, str); + jni::Local<jni::String> unaccented = android::StringUtils::unaccent(*env, input); + return jni::Make<std::string>(*env, unaccented); +} + +} // namespace platform +} // namespace mbgl |