1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "android/jni/jni_utils.h" 6#include "base/logging.h" 7#include "base/utf_string_conversions.h" 8#include "jni.h" 9 10namespace { 11JavaVM* sVM = NULL; 12 13JavaVM* getJavaVM() { 14 return sVM; 15} 16} 17 18namespace android { 19namespace jni { 20 21// All JNI code assumes this has previously been called with a valid VM 22void SetJavaVM(JavaVM* vm) 23{ 24 sVM = vm; 25} 26 27bool checkException(JNIEnv* env) 28{ 29 if (env->ExceptionCheck() != 0) 30 { 31 LOG(ERROR) << "*** Uncaught exception returned from Java call!\n"; 32 env->ExceptionDescribe(); 33 return true; 34 } 35 return false; 36} 37 38string16 jstringToString16(JNIEnv* env, jstring jstr) 39{ 40 if (!jstr || !env) 41 return string16(); 42 43 const char* s = env->GetStringUTFChars(jstr, 0); 44 if (!s) 45 return string16(); 46 string16 str = UTF8ToUTF16(s); 47 env->ReleaseStringUTFChars(jstr, s); 48 checkException(env); 49 return str; 50} 51 52std::string jstringToStdString(JNIEnv* env, jstring jstr) 53{ 54 if (!jstr || !env) 55 return std::string(); 56 57 const char* s = env->GetStringUTFChars(jstr, 0); 58 if (!s) 59 return std::string(); 60 std::string str(s); 61 env->ReleaseStringUTFChars(jstr, s); 62 checkException(env); 63 return str; 64} 65 66JNIEnv* GetJNIEnv() { 67 JNIEnv* env; 68 getJavaVM()->AttachCurrentThread(&env, NULL); 69 return env; 70} 71 72std::string JstringToStdString(JNIEnv* env, jstring jstr) { 73 return jstringToStdString(env, jstr); 74} 75 76string16 JstringToString16(JNIEnv* env, jstring jstr) 77{ 78 return jstringToString16(env, jstr); 79} 80 81bool CheckException(JNIEnv* env) 82{ 83 return checkException(env); 84} 85 86jstring ConvertUTF8ToJavaString(JNIEnv* env, std::string str) 87{ 88 return env->NewStringUTF(str.c_str()); 89} 90 91void DetachFromVM() 92{ 93 JavaVM* vm = getJavaVM(); 94 vm->DetachCurrentThread(); 95} 96 97} // namespace jni 98} // namespace android 99 100