diff options
Diffstat (limited to 'platform/android/src/java')
| -rw-r--r-- | platform/android/src/java/util.cpp | 6 | ||||
| -rw-r--r-- | platform/android/src/java/util.hpp | 42 |
2 files changed, 48 insertions, 0 deletions
diff --git a/platform/android/src/java/util.cpp b/platform/android/src/java/util.cpp index c630e403d9..effd2ae0d0 100644 --- a/platform/android/src/java/util.cpp +++ b/platform/android/src/java/util.cpp @@ -6,9 +6,15 @@ namespace java { namespace util { jni::Class<List> List::javaClass; +jni::Class<Set> Set::javaClass; +jni::Class<Map> Map::javaClass; +jni::Class<Map::Entry> Map::Entry::javaClass; void registerNative(jni::JNIEnv& env) { List::javaClass = *jni::Class<List>::Find(env).NewGlobalRef(env).release(); + Set::javaClass = *jni::Class<Set>::Find(env).NewGlobalRef(env).release(); + Map::javaClass = *jni::Class<Map>::Find(env).NewGlobalRef(env).release(); + Map::Entry::javaClass = *jni::Class<Map::Entry>::Find(env).NewGlobalRef(env).release(); } diff --git a/platform/android/src/java/util.hpp b/platform/android/src/java/util.hpp index 1a552c7124..dedb8ac348 100644 --- a/platform/android/src/java/util.hpp +++ b/platform/android/src/java/util.hpp @@ -24,6 +24,48 @@ public: }; +class Set : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "java/util/Set"; }; + + template<class T> + static jni::Array<jni::Object<T>> toArray(jni::JNIEnv& env, jni::Object<Set> list) { + static auto toArray = Set::javaClass.GetMethod<jni::Array<jni::Object<>> ()>(env, "toArray"); + return (jni::Array<jni::Object<T>>) list.Call(env, toArray); + }; + + static jni::Class<Set> javaClass; + +}; + +class Map : private mbgl::util::noncopyable { +public: + + class Entry : private mbgl::util::noncopyable { + public: + static constexpr auto Name() { return "java/util/Map$Entry"; }; + + template <class T> + static jni::Object<T> getKey(jni::JNIEnv& env, jni::Object<Entry> entry) { + static auto method = Entry::javaClass.GetMethod<jni::Object<> ()>(env, "getKey"); + return (jni::Object<T>) entry.Call(env, method); + } + + template <class T> + static jni::Object<T> getValue(jni::JNIEnv& env, jni::Object<Entry> entry) { + static auto method = Entry::javaClass.GetMethod<jni::Object<> ()>(env, "getValue"); + return (jni::Object<T>) entry.Call(env, method).Get(); + } + + static jni::Class<Entry> javaClass; + }; + + static constexpr auto Name() { return "java/util/Map"; }; + + static jni::Class<Map> javaClass; +}; + void registerNative(jni::JNIEnv&); |
