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/style | |
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/style')
-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 |
3 files changed, 19 insertions, 3 deletions
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; |