17f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/*
2956f54b391677d78379729dd14518edddf3c7660Etan Cohen * Copyright 2016, The Android Open Source Project
37f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
47f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Licensed under the Apache License, Version 2.0 (the "License");
57f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * you may not use this file except in compliance with the License.
67f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * You may obtain a copy of the License at
77f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
87f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *     http://www.apache.org/licenses/LICENSE-2.0
97f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde *
107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * Unless required by applicable law or agreed to in writing, software
117f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * distributed under the License is distributed on an "AS IS" BASIS,
127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * See the License for the specific language governing permissions and
147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde * limitations under the License.
157f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde */
167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#define LOG_TAG "wifi"
187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "jni.h"
207f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <ScopedUtfChars.h>
217f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/misc.h>
227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <android_runtime/AndroidRuntime.h>
237f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/Log.h>
247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include <utils/String16.h>
257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "wifi.h"
277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "wifi_hal.h"
287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde#include "jni_helper.h"
297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapndenamespace android {
317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
327f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde/* JNI Helpers for wifi_hal implementation */
337f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
347d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::JNIHelper(JavaVM *vm)
357d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
367d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    vm->AttachCurrentThread(&mEnv, NULL);
377d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mVM = vm;
387d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
397d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
407d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::JNIHelper(JNIEnv *env)
417d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
427d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mVM  = NULL;
437d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv = env;
447d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
457d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
467d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIHelper::~JNIHelper()
477d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
487d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (mVM != NULL) {
497d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        // mVM->DetachCurrentThread();  /* 'attempting to detach while still running code' */
507d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mVM = NULL;                     /* not really required; but may help debugging */
517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv = NULL;                    /* not really required; but may help debugging */
527d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
537d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
547d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejobject JNIHelper::newGlobalRef(jobject obj) {
567d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->NewGlobalRef(obj);
577d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
587d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::deleteGlobalRef(jobject obj) {
607d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->DeleteGlobalRef(obj);
617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
627d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejobject JNIHelper::newLocalRef(jobject obj) {
647d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->NewLocalRef(obj);
657d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
667d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
677d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::deleteLocalRef(jobject obj) {
687d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->DeleteLocalRef(obj);
697d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
707d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
717d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::throwException(const char *message, int line)
727f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
737f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    ALOGE("error at line %d: %s", line, message);
747f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
757f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    const char *className = "java/lang/Exception";
767f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
777d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jclass exClass = mEnv->FindClass(className );
787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if ( exClass == NULL ) {
797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        ALOGE("Could not find exception class to throw error");
807f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        ALOGE("error at line %d: %s", line, message);
817f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
827f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
837f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
847d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->ThrowNew(exClass, message);
857f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
867f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
877d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejboolean JNIHelper::getBoolField(jobject obj, const char *name)
88e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{
897d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
907d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "Z");
91e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    if (field == 0) {
927d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
93e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde        return 0;
94e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    }
95e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
967d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetBooleanField(obj, field);
97e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde}
98e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
997d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejint JNIHelper::getIntField(jobject obj, const char *name)
100e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{
1017d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1027d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "I");
103e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    if (field == 0) {
1047d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
105e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde        return 0;
106e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    }
107e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
1087d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetIntField(obj, field);
109e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde}
110e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
1117d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejbyte JNIHelper::getByteField(jobject obj, const char *name)
112c96feb800590f43b7be76d1000ab5d949e5c6790xinhe{
1137d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1147d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "B");
115c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    if (field == 0) {
1167d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
117c96feb800590f43b7be76d1000ab5d949e5c6790xinhe        return 0;
118c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    }
119c96feb800590f43b7be76d1000ab5d949e5c6790xinhe
1207d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetByteField(obj, field);
121c96feb800590f43b7be76d1000ab5d949e5c6790xinhe}
122c96feb800590f43b7be76d1000ab5d949e5c6790xinhe
1237d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getLongField(jobject obj, const char *name)
1247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
1257d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1267d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "J");
1277f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == 0) {
1287d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
1297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return 0;
1307f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
1317f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
1327d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetLongField(obj, field);
133e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde}
134e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
1357d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jstring> JNIHelper::getStringField(jobject obj, const char *name)
136aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{
1377d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jobject> m = getObjectField(obj, name, "Ljava/lang/String;");
1387d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (m == NULL) {
1397d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
1407d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jstring>(*this, NULL);
1417d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
1427d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1437d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jstring>(*this, (jstring)m.detach());
144b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande}
145b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande
1467d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandebool JNIHelper::getStringFieldValue(jobject obj, const char *name, char *buf, int size)
147b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{
1487d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1497d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "Ljava/lang/String;");
150aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (field == 0) {
1517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
152aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return 0;
153aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
154aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
1557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jobject> value(*this, mEnv->GetObjectField(obj, field));
1567d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jstring> string(*this, (jstring)value.clone());
1577d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    ScopedUtfChars chars(mEnv, string);
1587d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    const char *utf = chars.c_str();
1607d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (utf == NULL) {
1617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing value");
1627d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return false;
1637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
1647d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1657d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (*utf != 0 && size < 1) {
1667d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return false;
1677d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
1687d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1697d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    strncpy(buf, utf, size);
1707d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (size > 0) {
1717d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        buf[size - 1] = 0;
1727d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
1737d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1747d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return true;
1757d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
1767d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
1777d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getStaticLongField(jobject obj, const char *name)
1787d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
1797d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1807d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return getStaticLongField(cls, name);
181aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle}
182aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
1837d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getStaticLongField(jclass cls, const char *name)
184e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{
1857d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetStaticFieldID(cls, name, "J");
186e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    if (field == 0) {
1877d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
188e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde        return 0;
189e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    }
1907d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    //ALOGE("getStaticLongField %s %p", name, cls);
1917d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetStaticLongField(cls, field);
1927d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
193e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
1947d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobject> JNIHelper::getObjectField(jobject obj, const char *name, const char *type)
1957d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
1967d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
1977d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, type);
1987d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (field == 0) {
1997d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
2007d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
2017d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
2027d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
2037d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jobject>(*this, mEnv->GetObjectField(obj, field));
2047d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
2057d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
2067d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobjectArray> JNIHelper::getArrayField(jobject obj, const char *name, const char *type)
2077d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
2087d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
2097d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, type);
2107d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (field == 0) {
2117d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
2127d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobjectArray>(*this, NULL);
2137d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
2147d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
2157d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jobjectArray>(*this, (jobjectArray)mEnv->GetObjectField(obj, field));
2167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
2177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
2187d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getLongArrayField(jobject obj, const char *name, int index)
2197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
2207d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
2217d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "[J");
2227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == 0) {
2237d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field definition");
2247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return 0;
2257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
2267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
2277d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jlongArray> array(*this, (jlongArray)mEnv->GetObjectField(obj, field));
22851da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande    if (array == NULL) {
2297d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing array");
23051da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande        return 0;
23151da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande    }
23251da80208c650a8271a18b0ca8681279ba060e1fVinit Deshpande
2337d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jlong *elem = mEnv->GetLongArrayElements(array, 0);
2347f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (elem == NULL) {
2357d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing index element");
2367f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return 0;
2377f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
2387f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
2397f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    jlong value = elem[index];
2407d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->ReleaseLongArrayElements(array, elem, 0);
2417f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    return value;
2427f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
2437f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
244956f54b391677d78379729dd14518edddf3c7660Etan Cohenvoid JNIHelper::getByteArrayField(jobject obj, const char *name, byte* buf, int size) {
245956f54b391677d78379729dd14518edddf3c7660Etan Cohen    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
246956f54b391677d78379729dd14518edddf3c7660Etan Cohen    jfieldID field = mEnv->GetFieldID(cls, name, "[B");
247956f54b391677d78379729dd14518edddf3c7660Etan Cohen    if (field == 0) {
248956f54b391677d78379729dd14518edddf3c7660Etan Cohen        THROW(*this, "Error in accessing field definition");
249956f54b391677d78379729dd14518edddf3c7660Etan Cohen        return;
250956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
251956f54b391677d78379729dd14518edddf3c7660Etan Cohen
252956f54b391677d78379729dd14518edddf3c7660Etan Cohen    JNIObject<jbyteArray> array(*this, (jbyteArray)mEnv->GetObjectField(obj, field));
253956f54b391677d78379729dd14518edddf3c7660Etan Cohen    if (array == NULL) {
254956f54b391677d78379729dd14518edddf3c7660Etan Cohen        THROW(*this, "Error in accessing array");
255956f54b391677d78379729dd14518edddf3c7660Etan Cohen        return;
256956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
257956f54b391677d78379729dd14518edddf3c7660Etan Cohen
258956f54b391677d78379729dd14518edddf3c7660Etan Cohen    jbyte *elem = mEnv->GetByteArrayElements(array, 0);
259956f54b391677d78379729dd14518edddf3c7660Etan Cohen    if (elem == NULL) {
260956f54b391677d78379729dd14518edddf3c7660Etan Cohen        THROW(*this, "Error in accessing index element");
261956f54b391677d78379729dd14518edddf3c7660Etan Cohen        return;
262956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
263956f54b391677d78379729dd14518edddf3c7660Etan Cohen
264956f54b391677d78379729dd14518edddf3c7660Etan Cohen    memcpy(buf, elem, size);
265956f54b391677d78379729dd14518edddf3c7660Etan Cohen    mEnv->ReleaseByteArrayElements(array, elem, 0);
266956f54b391677d78379729dd14518edddf3c7660Etan Cohen}
267956f54b391677d78379729dd14518edddf3c7660Etan Cohen
2687d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getStaticLongArrayField(jobject obj, const char *name, int index)
269aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{
2707d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
2717d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return getStaticLongArrayField(cls, name, index);
272b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande}
273b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande
2747d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejlong JNIHelper::getStaticLongArrayField(jclass cls, const char *name, int index)
275b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{
2767d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetStaticFieldID(cls, name, "[J");
277aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (field == 0) {
2787d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field definition");
279aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return 0;
280aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
281aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
2827d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jlongArray> array(*this, (jlongArray)mEnv->GetStaticObjectField(cls, field));
2837d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jlong *elem = mEnv->GetLongArrayElements(array, 0);
284aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (elem == NULL) {
2857d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing index element");
286aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return 0;
287aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
288aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
289aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    jlong value = elem[index];
2907d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->ReleaseLongArrayElements(array, elem, 0);
291aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    return value;
292aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle}
293aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
2947d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobject> JNIHelper::getObjectArrayField(jobject obj, const char *name, const char *type,
2957d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandeint index)
296e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde{
2977d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
2987d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, type);
299e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    if (field == 0) {
3007d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field definition");
3017d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
302e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    }
303e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
3047d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jobjectArray> array(*this, (jobjectArray)mEnv->GetObjectField(obj, field));
3057d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jobject> elem(*this, mEnv->GetObjectArrayElement(array, index));
3067d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (elem.isNull()) {
3077d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing index element");
3087d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
309e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    }
310e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde    return elem;
311e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde}
312e4e3750390bec0a849a9153348b7c21b2cc8b843Vinit Deshapnde
3137d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setIntField(jobject obj, const char *name, jint value)
3147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
3157d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
3167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
3177d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
3187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
3197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
3207f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3217d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "I");
3227f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == NULL) {
3237d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
3247f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
3257f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
3267f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3277d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetIntField(obj, field, value);
3287f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
3297f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3307d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setByteField(jobject obj, const char *name, jbyte value)
331c96feb800590f43b7be76d1000ab5d949e5c6790xinhe{
3327d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
333c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    if (cls == NULL) {
3347d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
335c96feb800590f43b7be76d1000ab5d949e5c6790xinhe        return;
336c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    }
337c96feb800590f43b7be76d1000ab5d949e5c6790xinhe
3387d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "B");
339c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    if (field == NULL) {
3407d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
341c96feb800590f43b7be76d1000ab5d949e5c6790xinhe        return;
342c96feb800590f43b7be76d1000ab5d949e5c6790xinhe    }
343c96feb800590f43b7be76d1000ab5d949e5c6790xinhe
3447d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetByteField(obj, field, value);
345c96feb800590f43b7be76d1000ab5d949e5c6790xinhe}
346c96feb800590f43b7be76d1000ab5d949e5c6790xinhe
3477d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setBooleanField(jobject obj, const char *name, jboolean value)
34812cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe{
3497d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
35012cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe    if (cls == NULL) {
3517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
35212cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe        return;
35312cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe    }
35412cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe
3557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "Z");
35612cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe    if (field == NULL) {
3577d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
35812cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe        return;
35912cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe    }
36012cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe
3617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetBooleanField(obj, field, value);
36212cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe}
36312cf388ecf3b2aa5ba66ed680b931fa356ab75b5xinhe
3647d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setLongField(jobject obj, const char *name, jlong value)
3657f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
3667d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
3677f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
3687d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
3697f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
3707f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
3717f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3727d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "J");
3737f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == NULL) {
3747d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
3757f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
3767f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
3777f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3787d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetLongField(obj, field, value);
3797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
3807f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
3817d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setStaticLongField(jobject obj, const char *name, jlong value)
382aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{
3837d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
384aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (cls == NULL) {
3857d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
386aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return;
387aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
388aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
3897d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    setStaticLongField(cls, name, value);
390b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande}
391b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande
3927d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setStaticLongField(jclass cls, const char *name, jlong value)
393b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{
3947d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetStaticFieldID(cls, name, "J");
395aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (field == NULL) {
3967d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
397aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return;
398aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
399aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
4007d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetStaticLongField(cls, field, value);
401aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle}
402aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
4037d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setLongArrayField(jobject obj, const char *name, jlongArray value)
4047f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
4057d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
4067f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
4077d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
4087f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4097f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4117d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "[J");
4127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == NULL) {
4137d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
4147f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4157f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4177d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetObjectField(obj, field, value);
4187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
4197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4207d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setStaticLongArrayField(jobject obj, const char *name, jlongArray value)
421aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle{
4227d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
423aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (cls == NULL) {
4247d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
425aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return;
426aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
427aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
4287d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    setStaticLongArrayField(cls, name, value);
429b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande}
430b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande
4317d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setStaticLongArrayField(jclass cls, const char *name, jlongArray value)
432b0b1d59786de7ff1fc98e31a16a7d710458bf549Vinit Deshpande{
4337d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetStaticFieldID(cls, name, "[J");
434aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    if (field == NULL) {
4357d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
436aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle        return;
437aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    }
438aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
4397d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetStaticObjectField(cls, field, value);
440aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle    ALOGD("array field set");
441aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle}
442aabe7a9f2f32915fd1f25416a6d2034a844005d6vandwalle
4437d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setLongArrayElement(jobject obj, const char *name, int index, jlong value)
4447f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
4457d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
4467f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
4477d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
4487f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4497f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4507f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, "[J");
4527f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == NULL) {
4537d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
4547f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4557f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4567f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4577d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jlongArray> array(*this, (jlongArray)mEnv->GetObjectField(obj, field));
4587f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (array == NULL) {
4597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing array");
4607f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4617f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4627f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jlong *elem = mEnv->GetLongArrayElements(array, NULL);
4647f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (elem == NULL) {
4657d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing index element");
4667f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4677f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4687f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4697f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    elem[index] = value;
4707d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->ReleaseLongArrayElements(array, elem, 0);
4717f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
4727f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4737d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setObjectField(jobject obj, const char *name, const char *type, jobject value)
4747f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
4757d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->GetObjectClass(obj));
4767f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
4777d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing class");
4787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4807f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4817d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jfieldID field = mEnv->GetFieldID(cls, name, type);
4827f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (field == NULL) {
4837d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error in accessing field");
4847f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
4857f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
4867f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4877d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetObjectField(obj, field, value);
4887f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
4897f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
4907d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejboolean JNIHelper::setStringField(jobject obj, const char *name, const char *value)
4917f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
4927d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jstring> str(*this, mEnv->NewStringUTF(value));
4935cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe
4947d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (mEnv->ExceptionCheck()) {
4957d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionDescribe();
4967d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionClear();
4975cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe        return false;
4985cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe    }
4995cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe
5007f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (str == NULL) {
5017d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        THROW(*this, "Error creating string");
5025cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe        return false;
5037f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
5047f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5057d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    setObjectField(obj, name, "Ljava/lang/String;", str);
5065cfd8d8b9f241dcad874125a1b5538ee0d6860fexinhe    return true;
5077f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
5087f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5097d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::reportEvent(jclass cls, const char *method, const char *signature, ...)
5107f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
5117f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    va_list params;
5127f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    va_start(params, signature);
5137f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5147d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jmethodID methodID = mEnv->GetStaticMethodID(cls, method, signature);
5157d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (methodID == 0) {
5167f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        ALOGE("Error in getting method ID");
5177f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        return;
5187f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
5197f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5207d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->CallStaticVoidMethodV(cls, methodID, params);
5217d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (mEnv->ExceptionCheck()) {
5227d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionDescribe();
5237d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionClear();
5247d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
5257d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
5267d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    va_end(params);
5277d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
5287d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
529956f54b391677d78379729dd14518edddf3c7660Etan Cohenvoid JNIHelper::callMethod(jobject obj, const char *method, const char *signature, ...)
530956f54b391677d78379729dd14518edddf3c7660Etan Cohen{
531956f54b391677d78379729dd14518edddf3c7660Etan Cohen    va_list params;
532956f54b391677d78379729dd14518edddf3c7660Etan Cohen    va_start(params, signature);
533956f54b391677d78379729dd14518edddf3c7660Etan Cohen
534956f54b391677d78379729dd14518edddf3c7660Etan Cohen    jclass cls = mEnv->GetObjectClass(obj);
535956f54b391677d78379729dd14518edddf3c7660Etan Cohen    jmethodID methodID = mEnv->GetMethodID(cls, method, signature);
536956f54b391677d78379729dd14518edddf3c7660Etan Cohen    if (methodID == 0) {
537956f54b391677d78379729dd14518edddf3c7660Etan Cohen        ALOGE("Error in getting method ID");
538956f54b391677d78379729dd14518edddf3c7660Etan Cohen        return;
539956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
540956f54b391677d78379729dd14518edddf3c7660Etan Cohen
541956f54b391677d78379729dd14518edddf3c7660Etan Cohen    mEnv->CallVoidMethodV(obj, methodID, params);
542956f54b391677d78379729dd14518edddf3c7660Etan Cohen    if (mEnv->ExceptionCheck()) {
543956f54b391677d78379729dd14518edddf3c7660Etan Cohen        mEnv->ExceptionDescribe();
544956f54b391677d78379729dd14518edddf3c7660Etan Cohen        mEnv->ExceptionClear();
545956f54b391677d78379729dd14518edddf3c7660Etan Cohen    }
546956f54b391677d78379729dd14518edddf3c7660Etan Cohen
547956f54b391677d78379729dd14518edddf3c7660Etan Cohen    va_end(params);
548956f54b391677d78379729dd14518edddf3c7660Etan Cohen}
549956f54b391677d78379729dd14518edddf3c7660Etan Cohen
5507d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandejboolean JNIHelper::callStaticMethod(jclass cls, const char *method, const char *signature, ...)
5517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
5527d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    va_list params;
5537d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    va_start(params, signature);
5547d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
5557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jmethodID methodID = mEnv->GetStaticMethodID(cls, method, signature);
5567d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (methodID == 0) {
5577d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        ALOGE("Error in getting method ID");
5587d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return false;
5597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
5607d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
5617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    jboolean result = mEnv->CallStaticBooleanMethodV(cls, methodID, params);
5627d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (mEnv->ExceptionCheck()) {
5637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionDescribe();
5647d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        mEnv->ExceptionClear();
5657d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return false;
566127f7244183786e6ccae09e81eeccdac31973e69xinhe    }
5677d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
5687f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    va_end(params);
5697d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return result;
5707f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
5717f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5723592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalJNIObject<jobject> JNIHelper::createObject(const char *className) {
5733592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    return createObjectWithArgs(className, "()V");
5743592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal}
5753592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal
5763592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalJNIObject<jobject> JNIHelper::createObjectWithArgs(
5773592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    const char *className, const char *signature, ...)
5787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde{
5793592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    va_list params;
5803592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    va_start(params, signature);
5813592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal
5827d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->FindClass(className));
5837f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    if (cls == NULL) {
58483a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande        ALOGE("Error in finding class %s", className);
5857d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
5867f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
5877f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
5883592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    jmethodID constructor = mEnv->GetMethodID(cls, "<init>", signature);
5897d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (constructor == 0) {
59083a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande        ALOGE("Error in constructor ID for %s", className);
5917d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
5927f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
5937d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
5943592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    JNIObject<jobject> obj(*this, mEnv->NewObjectV(cls, constructor, params));
595127f7244183786e6ccae09e81eeccdac31973e69xinhe    if (obj == NULL) {
5967f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde        ALOGE("Could not create new object of %s", className);
5977d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobject>(*this, NULL);
5987f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    }
5997f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
6003592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawal    va_end(params);
6017f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde    return obj;
6027f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}
6037f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
6047d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobjectArray> JNIHelper::createObjectArray(const char *className, int num)
60583a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande{
6067d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->FindClass(className));
60783a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande    if (cls == NULL) {
60883a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande        ALOGE("Error in finding class %s", className);
6097d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobjectArray>(*this, NULL);
61083a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande    }
61183a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande
6127d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jobject> array(*this, mEnv->NewObjectArray(num, cls.get(), NULL));
6137d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (array.get() == NULL) {
61483a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande        ALOGE("Error in creating array of class %s", className);
6157d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobjectArray>(*this, NULL);
61683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande    }
61783a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande
6187d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jobjectArray>(*this, (jobjectArray)array.detach());
6197d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6207d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6217d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobject> JNIHelper::getObjectArrayElement(jobjectArray array, int index)
6227d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
6237d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jobject>(*this, mEnv->GetObjectArrayElement(array, index));
6247d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6257d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6267d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobject> JNIHelper::getObjectArrayElement(jobject array, int index)
6277d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande{
6287d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return getObjectArrayElement((jobjectArray)array, index);
6297d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6307d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6317d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandeint JNIHelper::getArrayLength(jarray array) {
6327d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return mEnv->GetArrayLength(array);
6337d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6347d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6357d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jobjectArray> JNIHelper::newObjectArray(int num, const char *className, jobject val) {
6367d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    JNIObject<jclass> cls(*this, mEnv->FindClass(className));
6377d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    if (cls == NULL) {
6387d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        ALOGE("Error in finding class %s", className);
6397d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande        return JNIObject<jobjectArray>(*this, NULL);
6407d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    }
6417d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6427d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jobjectArray>(*this, mEnv->NewObjectArray(num, cls, val));
6437d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6447d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6457d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jbyteArray> JNIHelper::newByteArray(int num) {
6467d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jbyteArray>(*this, mEnv->NewByteArray(num));
6477d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6487d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6497d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jintArray> JNIHelper::newIntArray(int num) {
6507d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jintArray>(*this, mEnv->NewIntArray(num));
6517d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6527d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6537d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jlongArray> JNIHelper::newLongArray(int num) {
6547d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jlongArray>(*this, mEnv->NewLongArray(num));
6557d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6567d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6577d519b6686ece717fd3890c0656b46155c22a377Vinit DeshpandeJNIObject<jstring> JNIHelper::newStringUTF(const char *utf) {
6587d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    return JNIObject<jstring>(*this, mEnv->NewStringUTF(utf));
6597d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6607d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6617d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpandevoid JNIHelper::setObjectArrayElement(jobjectArray array, int index, jobject obj) {
6627d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetObjectArrayElement(array, index, obj);
6637d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6647d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6653592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalvoid JNIHelper::setByteArrayRegion(jbyteArray array, int from, int to, const jbyte *bytes) {
6667d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetByteArrayRegion(array, from, to, bytes);
6677d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6687d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6693592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalvoid JNIHelper::setIntArrayRegion(jintArray array, int from, int to, const jint *ints) {
6707d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetIntArrayRegion(array, from, to, ints);
6717d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande}
6727d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande
6733592af2adb0c30244a46db03164ca0f7e6d3b613mukesh agrawalvoid JNIHelper::setLongArrayRegion(jlongArray array, int from, int to, const jlong *longs) {
6747d519b6686ece717fd3890c0656b46155c22a377Vinit Deshpande    mEnv->SetLongArrayRegion(array, from, to, longs);
67583a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande}
67683a674a18c84ff4f01377bbfd8988699dec93bc2Vinit Deshpande
6777f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde}; // namespace android
6787f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
6797f9a15d554f69311a0db43347d6473a7c4c46e2eVinit Deshapnde
680