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