summaryrefslogtreecommitdiff
path: root/platform/android/src
diff options
context:
space:
mode:
authorzmiao <miao.zhao@mapbox.com>2019-08-22 18:54:31 +0300
committerGitHub <noreply@github.com>2019-08-22 18:54:31 +0300
commit2a8359b0280e861450f9bdf390a01e0363202b3a (patch)
tree45787259e7f16199688f212f69a10c89dd2089cb /platform/android/src
parent4a5475b1c63843f35ac26ba3a17d58022c9b2777 (diff)
downloadqtlocation-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.cpp8
-rw-r--r--platform/android/src/java_types.hpp6
-rw-r--r--platform/android/src/style/android_conversion.hpp15
-rw-r--r--platform/android/src/style/value.cpp6
-rw-r--r--platform/android/src/style/value.hpp1
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;