summaryrefslogtreecommitdiff
path: root/platform/android/src/text
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2018-08-17 13:43:07 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2018-09-07 09:44:12 -0700
commit53c3c327f0ebea276d977f58a59cdb9449165518 (patch)
tree1315a80a1c24f24dd1cbd4e00cf85083be16ce45 /platform/android/src/text
parent6806ba5b52129050c0944bd7c8b1fe285baeeddc (diff)
downloadqtlocation-mapboxgl-53c3c327f0ebea276d977f58a59cdb9449165518.tar.gz
[android] Upgrade to latest jni.hpp
Diffstat (limited to 'platform/android/src/text')
-rw-r--r--platform/android/src/text/collator.cpp67
-rw-r--r--platform/android/src/text/collator_jni.hpp4
-rw-r--r--platform/android/src/text/local_glyph_rasterizer.cpp26
-rw-r--r--platform/android/src/text/local_glyph_rasterizer_jni.hpp4
4 files changed, 41 insertions, 60 deletions
diff --git a/platform/android/src/text/collator.cpp b/platform/android/src/text/collator.cpp
index 37af0a1c5b..86e72a1dac 100644
--- a/platform/android/src/text/collator.cpp
+++ b/platform/android/src/text/collator.cpp
@@ -13,34 +13,32 @@ namespace mbgl {
namespace android {
void Collator::registerNative(jni::JNIEnv& env) {
- javaClass = *jni::Class<Collator>::Find(env).NewGlobalRef(env).release();
+ jni::Class<Collator>::Singleton(env);
}
-jni::Class<Collator> Collator::javaClass;
-
jni::Object<Collator> Collator::getInstance(jni::JNIEnv& env, jni::Object<Locale> locale) {
- using Signature = jni::Object<Collator>(jni::Object<Locale>);
- auto method = javaClass.GetStaticMethod<Signature>(env, "getInstance");
+ static auto javaClass = jni::Class<Collator>::Singleton(env);
+ static auto method = javaClass.GetStaticMethod<jni::Object<Collator> (jni::Object<Locale>)>(env, "getInstance");
return javaClass.Call(env, method, locale);
}
void Collator::setStrength(jni::JNIEnv& env, jni::Object<Collator> collator, jni::jint strength) {
- using Signature = void(jni::jint);
- auto static method = javaClass.GetMethod<Signature>(env, "setStrength");
+ static auto javaClass = jni::Class<Collator>::Singleton(env);
+ static auto method = javaClass.GetMethod<void (jni::jint)>(env, "setStrength");
collator.Call(env, method, strength);
}
jni::jint Collator::compare(jni::JNIEnv& env, jni::Object<Collator> collator, jni::String lhs, jni::String rhs) {
- using Signature = jni::jint(jni::String, jni::String);
- auto static method = javaClass.GetMethod<Signature>(env, "compare");
+ static auto javaClass = jni::Class<Collator>::Singleton(env);
+ auto static method = javaClass.GetMethod<jni::jint (jni::String, jni::String)>(env, "compare");
return collator.Call(env, method, lhs, rhs);
}
void Locale::registerNative(jni::JNIEnv& env) {
- javaClass = *jni::Class<Locale>::Find(env).NewGlobalRef(env).release();
+ jni::Class<Locale>::Singleton(env);
}
- /*
+/*
We would prefer to use for/toLanguageTag, but they're only available in API level 21+
jni::Object<Locale> Locale::forLanguageTag(jni::JNIEnv& env, jni::String languageTag) {
@@ -54,39 +52,38 @@ jni::String Locale::toLanguageTag(jni::JNIEnv& env, jni::Object<Locale> locale)
auto static method = javaClass.GetMethod<Signature>(env, "toLanguageTag");
return locale.Call(env, method);
}
- */
-
+*/
jni::String Locale::getLanguage(jni::JNIEnv& env, jni::Object<Locale> locale) {
- using Signature = jni::String();
- auto static method = javaClass.GetMethod<Signature>(env, "getLanguage");
+ static auto javaClass = jni::Class<Locale>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::String ()>(env, "getLanguage");
return locale.Call(env, method);
}
jni::String Locale::getCountry(jni::JNIEnv& env, jni::Object<Locale> locale) {
- using Signature = jni::String();
- auto static method = javaClass.GetMethod<Signature>(env, "getCountry");
+ static auto javaClass = jni::Class<Locale>::Singleton(env);
+ static auto method = javaClass.GetMethod<jni::String ()>(env, "getCountry");
return locale.Call(env, method);
}
jni::Object<Locale> Locale::getDefault(jni::JNIEnv& env) {
- using Signature = jni::Object<Locale>();
- auto method = javaClass.GetStaticMethod<Signature>(env, "getDefault");
+ static auto javaClass = jni::Class<Locale>::Singleton(env);
+ static auto method = javaClass.GetStaticMethod<jni::Object<Locale> ()>(env, "getDefault");
return javaClass.Call(env, method);
}
jni::Object<Locale> Locale::New(jni::JNIEnv& env, jni::String language) {
+ static auto javaClass = jni::Class<Locale>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::String>(env);
return javaClass.New(env, constructor, language);
}
jni::Object<Locale> Locale::New(jni::JNIEnv& env, jni::String language, jni::String region) {
+ static auto javaClass = jni::Class<Locale>::Singleton(env);
static auto constructor = javaClass.GetConstructor<jni::String, jni::String>(env);
return javaClass.New(env, constructor, language, region);
}
-jni::Class<Locale> Locale::javaClass;
-
} // namespace android
namespace style {
@@ -138,28 +135,23 @@ public:
// Because of the difference in locale-awareness, this means turning on case-sensitivity
// can _potentially_ change compare results for strings that don't actually have any case
// differences.
- jni::String jlhs = jni::Make<jni::String>(*env, useUnaccent ?
+ jni::Local<jni::String> jlhs = jni::SeizeLocal(*env, jni::Make<jni::String>(*env, useUnaccent ?
platform::unaccent(lhs) :
- lhs);
- jni::String jrhs = jni::Make<jni::String>(*env, useUnaccent ?
+ lhs));
+ jni::Local<jni::String> jrhs = jni::SeizeLocal(*env, jni::Make<jni::String>(*env, useUnaccent ?
platform::unaccent(rhs) :
- rhs);
-
- jni::jint result = android::Collator::compare(*env, *collator, jlhs, jrhs);;
+ rhs));
- jni::DeleteLocalRef(*env, jlhs);
- jni::DeleteLocalRef(*env, jrhs);
+ jni::jint result = android::Collator::compare(*env, *collator, *jlhs, *jrhs);
return result;
}
std::string resolvedLocale() const {
- jni::String jLanguage = android::Locale::getLanguage(*env, *locale);
- std::string language = jni::Make<std::string>(*env, jLanguage);
- jni::DeleteLocalRef(*env, jLanguage);
- jni::String jRegion = android::Locale::getCountry(*env, *locale);
- std::string region = jni::Make<std::string>(*env, jRegion);
- jni::DeleteLocalRef(*env, jRegion);
+ std::string language = jni::Make<std::string>(*env,
+ *jni::SeizeLocal(*env, android::Locale::getLanguage(*env, *locale)));
+ std::string region = jni::Make<std::string>(*env,
+ *jni::SeizeLocal(*env, android::Locale::getCountry(*env, *locale)));
optional<std::string> resultLanguage;
if (!language.empty()) resultLanguage = language;
@@ -168,13 +160,14 @@ public:
return LanguageTag(resultLanguage, {}, resultRegion).toBCP47();
}
+
private:
bool caseSensitive;
bool diacriticSensitive;
android::UniqueEnv env;
- jni::UniqueObject<android::Collator> collator;
- jni::UniqueObject<android::Locale> locale;
+ jni::Global<jni::Object<android::Collator>> collator;
+ jni::Global<jni::Object<android::Locale>> locale;
};
diff --git a/platform/android/src/text/collator_jni.hpp b/platform/android/src/text/collator_jni.hpp
index 96c381b1c1..30fb6a4369 100644
--- a/platform/android/src/text/collator_jni.hpp
+++ b/platform/android/src/text/collator_jni.hpp
@@ -31,10 +31,8 @@ public:
static jni::Object<Locale> New(jni::JNIEnv&, jni::String);
static jni::Object<Locale> New(jni::JNIEnv&, jni::String, jni::String);
- static jni::Class<Locale> javaClass;
static void registerNative(jni::JNIEnv&);
-
};
class Collator {
@@ -47,10 +45,8 @@ public:
static jni::jint compare(jni::JNIEnv&, jni::Object<Collator>, jni::String, jni::String);
- static jni::Class<Collator> javaClass;
static void registerNative(jni::JNIEnv&);
-
};
} // namespace android
diff --git a/platform/android/src/text/local_glyph_rasterizer.cpp b/platform/android/src/text/local_glyph_rasterizer.cpp
index 3dc1eb275a..adfa0559f3 100644
--- a/platform/android/src/text/local_glyph_rasterizer.cpp
+++ b/platform/android/src/text/local_glyph_rasterizer.cpp
@@ -36,6 +36,7 @@ namespace android {
LocalGlyphRasterizer::LocalGlyphRasterizer() {
UniqueEnv env { AttachEnv() };
+ static auto javaClass = jni::Class<LocalGlyphRasterizer>::Singleton(*env);
static auto constructor = javaClass.GetConstructor(*env);
javaObject = javaClass.New(*env, constructor).NewGlobalRef(*env);
@@ -44,29 +45,22 @@ LocalGlyphRasterizer::LocalGlyphRasterizer() {
PremultipliedImage LocalGlyphRasterizer::drawGlyphBitmap(const std::string& fontFamily, const bool bold, const GlyphID glyphID) {
UniqueEnv env { AttachEnv() };
- using Signature = jni::Object<Bitmap>(jni::String, jni::jboolean, jni::jchar);
- static auto method = javaClass.GetMethod<Signature>(*env, "drawGlyphBitmap");
+ static auto javaClass = jni::Class<LocalGlyphRasterizer>::Singleton(*env);
+ static auto drawGlyphBitmap = javaClass.GetMethod<jni::Object<Bitmap> (jni::String, jni::jboolean, jni::jchar)>(*env, "drawGlyphBitmap");
- jni::String jniFontFamily = jni::Make<jni::String>(*env, fontFamily);
+ auto javaBitmap = jni::SeizeLocal(*env,
+ javaObject->Call(*env, drawGlyphBitmap,
+ *jni::SeizeLocal(*env, jni::Make<jni::String>(*env, fontFamily)),
+ static_cast<jni::jboolean>(bold),
+ static_cast<jni::jchar>(glyphID)));
- auto javaBitmap = javaObject->Call(*env,
- method,
- jniFontFamily,
- static_cast<jni::jboolean>(bold),
- static_cast<jni::jchar>(glyphID));
- jni::DeleteLocalRef(*env, jniFontFamily);
-
- PremultipliedImage result = Bitmap::GetImage(*env, javaBitmap);
- jni::DeleteLocalRef(*env, javaBitmap);
- return result;
+ return Bitmap::GetImage(*env, *javaBitmap);
}
void LocalGlyphRasterizer::registerNative(jni::JNIEnv& env) {
- javaClass = *jni::Class<LocalGlyphRasterizer>::Find(env).NewGlobalRef(env).release();
+ jni::Class<LocalGlyphRasterizer>::Singleton(env);
}
-jni::Class<LocalGlyphRasterizer> LocalGlyphRasterizer::javaClass;
-
} // namespace android
class LocalGlyphRasterizer::Impl {
diff --git a/platform/android/src/text/local_glyph_rasterizer_jni.hpp b/platform/android/src/text/local_glyph_rasterizer_jni.hpp
index 1c83ea5f58..e80e848338 100644
--- a/platform/android/src/text/local_glyph_rasterizer_jni.hpp
+++ b/platform/android/src/text/local_glyph_rasterizer_jni.hpp
@@ -19,8 +19,6 @@ class LocalGlyphRasterizer {
public:
static constexpr auto Name() { return "com/mapbox/mapboxsdk/text/LocalGlyphRasterizer"; };
- static jni::Class<LocalGlyphRasterizer> javaClass;
-
static void registerNative(jni::JNIEnv&);
LocalGlyphRasterizer();
@@ -28,7 +26,7 @@ public:
PremultipliedImage drawGlyphBitmap(const std::string& fontFamily, const bool bold, const char16_t glyphID);
private:
- jni::UniqueObject<LocalGlyphRasterizer> javaObject;
+ jni::Global<jni::Object<LocalGlyphRasterizer>> javaObject;
};
} // namespace android