blob: 11ea100619df6a9b7b11bee03e3debc727d6709c [file] [log] [blame]
// 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_