blob: 72462e8908feae5aeeec45331994470f3d2196cb [file] [log] [blame]
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "android/jni/jni_utils.h"
#include "base/logging.h"
#include "base/utf_string_conversions.h"
#include "jni.h"
namespace {
JavaVM* sVM = NULL;
JavaVM* getJavaVM() {
return sVM;
}
}
namespace android {
namespace jni {
// All JNI code assumes this has previously been called with a valid VM
void SetJavaVM(JavaVM* vm)
{
sVM = vm;
}
bool checkException(JNIEnv* env)
{
if (env->ExceptionCheck() != 0)
{
LOG(ERROR) << "*** Uncaught exception returned from Java call!\n";
env->ExceptionDescribe();
return true;
}
return false;
}
string16 jstringToString16(JNIEnv* env, jstring jstr)
{
if (!jstr || !env)
return string16();
const char* s = env->GetStringUTFChars(jstr, 0);
if (!s)
return string16();
string16 str = UTF8ToUTF16(s);
env->ReleaseStringUTFChars(jstr, s);
checkException(env);
return str;
}
std::string jstringToStdString(JNIEnv* env, jstring jstr)
{
if (!jstr || !env)
return std::string();
const char* s = env->GetStringUTFChars(jstr, 0);
if (!s)
return std::string();
std::string str(s);
env->ReleaseStringUTFChars(jstr, s);
checkException(env);
return str;
}
JNIEnv* GetJNIEnv() {
JNIEnv* env;
getJavaVM()->AttachCurrentThread(&env, NULL);
return env;
}
std::string JstringToStdString(JNIEnv* env, jstring jstr) {
return jstringToStdString(env, jstr);
}
string16 JstringToString16(JNIEnv* env, jstring jstr)
{
return jstringToString16(env, jstr);
}
bool CheckException(JNIEnv* env)
{
return checkException(env);
}
jstring ConvertUTF8ToJavaString(JNIEnv* env, std::string str)
{
return env->NewStringUTF(str.c_str());
}
void DetachFromVM()
{
JavaVM* vm = getJavaVM();
vm->DetachCurrentThread();
}
} // namespace jni
} // namespace android