diff options
author | zmiao <miao.zhao@mapbox.com> | 2019-08-22 18:54:31 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-22 18:54:31 +0300 |
commit | 2a8359b0280e861450f9bdf390a01e0363202b3a (patch) | |
tree | 45787259e7f16199688f212f69a10c89dd2089cb /platform/android/src | |
parent | 4a5475b1c63843f35ac26ba3a17d58022c9b2777 (diff) | |
download | qtlocation-mapboxgl-2a8359b0280e861450f9bdf390a01e0363202b3a.tar.gz |
[android] bindings for aggregated cluster properties (#15425)
* [android] bindings for aggregated cluster properties
* [android] change the parameter type for adding clusterProperty
* [android] add changelog
* remove extra emplty line
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/java_types.cpp | 8 | ||||
-rw-r--r-- | platform/android/src/java_types.hpp | 6 | ||||
-rw-r--r-- | platform/android/src/style/android_conversion.hpp | 15 | ||||
-rw-r--r-- | platform/android/src/style/value.cpp | 6 | ||||
-rw-r--r-- | platform/android/src/style/value.hpp | 1 |
5 files changed, 33 insertions, 3 deletions
diff --git a/platform/android/src/java_types.cpp b/platform/android/src/java_types.cpp index dd165470cf..7a1ba93a58 100644 --- a/platform/android/src/java_types.cpp +++ b/platform/android/src/java_types.cpp @@ -18,6 +18,10 @@ namespace java { jni::jclass* Map::jclass; jni::jmethodID* Map::getMethodId; + jni::jmethodID* Map::keySetMethodId; + + jni::jclass* Set::jclass; + jni::jmethodID* Set::toArrayMethodId; void registerNatives(JNIEnv& env) { ObjectArray::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "[Ljava/lang/Object;")).release(); @@ -34,6 +38,10 @@ namespace java { Map::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Map")).release(); Map::getMethodId = &jni::GetMethodID(env, *Map::jclass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); + Map::keySetMethodId = &jni::GetMethodID(env, *Map::jclass, "keySet", "()Ljava/util/Set;"); + + Set::jclass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Set")).release(); + Set::toArrayMethodId = &jni::GetMethodID(env, *Set::jclass, "toArray", "()[Ljava/lang/Object;"); } } diff --git a/platform/android/src/java_types.hpp b/platform/android/src/java_types.hpp index edec5cb550..c7c93ce71b 100644 --- a/platform/android/src/java_types.hpp +++ b/platform/android/src/java_types.hpp @@ -29,6 +29,12 @@ namespace java { struct Map { static jni::jclass* jclass; static jni::jmethodID* getMethodId; + static jni::jmethodID* keySetMethodId; + }; + + struct Set { + static jni::jclass* jclass; + static jni::jmethodID* toArrayMethodId; }; void registerNatives(JNIEnv&); diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp index 8559720b2f..d38dbfa684 100644 --- a/platform/android/src/style/android_conversion.hpp +++ b/platform/android/src/style/android_conversion.hpp @@ -47,9 +47,18 @@ public: } template <class Fn> - static optional<Error> eachMember(const mbgl::android::Value&, Fn&&) { - // TODO - mbgl::Log::Warning(mbgl::Event::Android, "eachMember not implemented"); + static optional<Error> eachMember(const mbgl::android::Value& value, Fn&& fn) { + assert(value.isObject()); + mbgl::android::Value keys = value.keyArray(); + std::size_t length = arrayLength(keys); + for(std::size_t i = 0; i < length; ++i){ + const auto k = keys.get(i).toString(); + auto v = value.get(k.c_str()); + optional<Error> result = fn(k, std::move(v)); + if (result) { + return result; + } + } return {}; } diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index f916909687..2f04840729 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -63,6 +63,12 @@ namespace android { return Value(env, jni::Local<jni::Object<>>(env, member)); } + Value Value::keyArray() const{ + jni::jobject* set = jni::CallMethod<jni::jobject*>(env, value.get(), *java::Map::keySetMethodId); + jni::jobject* array = jni::CallMethod<jni::jobject*>(env, set, *java::Set::toArrayMethodId); + return Value(env, jni::Local<jni::Object<>>(env, array)); + } + int Value::getLength() const { auto array = (jni::jarray<jni::jobject>*) value.get(); return jni::GetArrayLength(env, *array); diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp index 0c702bb465..b507c5ed11 100644 --- a/platform/android/src/style/value.hpp +++ b/platform/android/src/style/value.hpp @@ -31,6 +31,7 @@ public: long toLong() const; bool toBool() const; Value get(const char* key) const; + Value keyArray() const; int getLength() const; Value get(const int index ) const; |