summaryrefslogtreecommitdiff
path: root/platform/android/src
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2018-07-27 14:00:55 +0200
committerTobrun <tobrun@mapbox.com>2018-09-11 12:58:56 +0200
commit6e171a62a9cc07ddbb0765e3021e46ebd60313df (patch)
treec77d834b170124d9cb9f8221ee11d61577d82d95 /platform/android/src
parent2fccdecfb1ae720682276c0342e1c3902d8c9873 (diff)
downloadqtlocation-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-xplatform/android/src/jni.cpp1
-rw-r--r--platform/android/src/string_util.cpp25
-rw-r--r--platform/android/src/text/collator.cpp12
-rw-r--r--platform/android/src/text/collator_jni.hpp11
-rw-r--r--platform/android/src/unaccent.cpp18
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