| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_LIB_JNI_JNI_OBJECT_H_ |
| #define FLUTTER_LIB_JNI_JNI_OBJECT_H_ |
| |
| #include <jni.h> |
| |
| #include "base/android/jni_android.h" |
| #include "lib/tonic/dart_wrappable.h" |
| |
| namespace blink { |
| |
| class JniClass; |
| |
| // Wrapper that exposes a JNI jobject to Dart |
| class JniObject : public ftl::RefCountedThreadSafe<JniObject>, |
| public tonic::DartWrappable { |
| DEFINE_WRAPPERTYPEINFO(); |
| FRIEND_MAKE_REF_COUNTED(JniObject); |
| |
| public: |
| ~JniObject() override; |
| |
| static ftl::RefPtr<JniObject> Create(JNIEnv* env, jobject object); |
| |
| jobject java_object() const { return object_.obj(); } |
| |
| ftl::RefPtr<JniClass> GetObjectClass(); |
| |
| ftl::RefPtr<JniObject> GetObjectField(jfieldID fieldId); |
| bool GetBooleanField(jfieldID fieldId); |
| int64_t GetByteField(jfieldID fieldId); |
| int64_t GetCharField(jfieldID fieldId); |
| int64_t GetShortField(jfieldID fieldId); |
| int64_t GetIntField(jfieldID fieldId); |
| int64_t GetLongField(jfieldID fieldId); |
| double GetFloatField(jfieldID fieldId); |
| double GetDoubleField(jfieldID fieldId); |
| |
| void SetObjectField(jfieldID fieldId, const JniObject* value); |
| void SetBooleanField(jfieldID fieldId, bool value); |
| void SetByteField(jfieldID fieldId, int64_t value); |
| void SetCharField(jfieldID fieldId, int64_t value); |
| void SetShortField(jfieldID fieldId, int64_t value); |
| void SetIntField(jfieldID fieldId, int64_t value); |
| void SetLongField(jfieldID fieldId, int64_t value); |
| void SetFloatField(jfieldID fieldId, double value); |
| void SetDoubleField(jfieldID fieldId, double value); |
| |
| ftl::RefPtr<JniObject> CallObjectMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| bool CallBooleanMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| int64_t CallByteMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| int64_t CallCharMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| int64_t CallShortMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| int64_t CallIntMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| int64_t CallLongMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| double CallFloatMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| double CallDoubleMethod(jmethodID methodId, |
| const std::vector<Dart_Handle>& args); |
| void CallVoidMethod(jmethodID methodId, const std::vector<Dart_Handle>& args); |
| |
| protected: |
| JniObject(JNIEnv* env, jobject object); |
| |
| base::android::ScopedJavaGlobalRef<jobject> object_; |
| }; |
| |
| } // namespace blink |
| |
| #endif // FLUTTER_LIB_JNI_JNI_OBJECT_H_ |