147 lines
5.5 KiB
C++
147 lines
5.5 KiB
C++
/****************************************************************************
|
|
* *
|
|
* Project 64 - A Nintendo 64 emulator. *
|
|
* http://www.pj64-emu.com/ *
|
|
* Copyright (C) 2012 Project64. All rights reserved. *
|
|
* *
|
|
* License: *
|
|
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
|
|
* *
|
|
****************************************************************************/
|
|
#include <Project64-core/TraceModulesProject64.h>
|
|
#include <Common/Trace.h>
|
|
#include "JavaBridge.h"
|
|
#include "jniBridge.h"
|
|
|
|
#ifdef ANDROID
|
|
JavaBridge::JavaBridge(JavaVM* vm) :
|
|
m_vm(vm)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
jclass GalleryActivityClass = env->FindClass("emu/project64/GalleryActivity");
|
|
if (GalleryActivityClass != NULL)
|
|
{
|
|
m_GalleryActivityClass = (jclass)env->NewGlobalRef(GalleryActivityClass);
|
|
}
|
|
jclass NotifierClass = env->FindClass("emu/project64/util/Notifier");
|
|
if (NotifierClass != NULL)
|
|
{
|
|
m_NotifierClass = (jclass)env->NewGlobalRef(NotifierClass);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::GfxThreadInit()
|
|
{
|
|
WriteTrace(TraceUserInterface, TraceDebug, "Start");
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (g_GLThread != NULL && env != NULL)
|
|
{
|
|
jclass GLThreadClass = env->GetObjectClass(g_GLThread);
|
|
jmethodID midThreadStarting = env->GetMethodID(GLThreadClass, "ThreadStarting", "()V");
|
|
env->CallVoidMethod(g_GLThread, midThreadStarting);
|
|
env->DeleteLocalRef(GLThreadClass);
|
|
}
|
|
WriteTrace(TraceUserInterface, TraceDebug, "Done");
|
|
}
|
|
|
|
void JavaBridge::GfxThreadDone()
|
|
{
|
|
WriteTrace(TraceUserInterface, TraceDebug, "Start");
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (g_GLThread != NULL && env != NULL)
|
|
{
|
|
WriteTrace(TraceUserInterface, TraceDebug, "calling java GLThread::ThreadExiting");
|
|
jclass GLThreadClass = env->GetObjectClass(g_GLThread);
|
|
jmethodID midThreadExiting = env->GetMethodID(GLThreadClass, "ThreadExiting", "()V");
|
|
env->CallVoidMethod(g_GLThread, midThreadExiting);
|
|
env->DeleteLocalRef(GLThreadClass);
|
|
}
|
|
WriteTrace(TraceUserInterface, TraceDebug, "Done");
|
|
}
|
|
|
|
void JavaBridge::SwapWindow()
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (g_GLThread != NULL && env != NULL)
|
|
{
|
|
jclass GLThreadClass = env->GetObjectClass(g_GLThread);
|
|
jmethodID midSwapBuffers = env->GetMethodID(GLThreadClass, "SwapBuffers", "()V");
|
|
env->CallVoidMethod(g_GLThread, midSwapBuffers);
|
|
env->DeleteLocalRef(GLThreadClass);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::RomListReset(void)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (env)
|
|
{
|
|
jmethodID midRomListReset = env->GetStaticMethodID(m_GalleryActivityClass, "RomListReset", "()V");
|
|
env->CallStaticVoidMethod(m_GalleryActivityClass, midRomListReset);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::RomListAddItem(const char * FullFileName, const char * FileName, const char * GoodName, uint32_t TextColor)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (env)
|
|
{
|
|
jmethodID midRomListAddItem = env->GetStaticMethodID(m_GalleryActivityClass, "RomListAddItem", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V");
|
|
if (midRomListAddItem != NULL)
|
|
{
|
|
jstring j_FullFileName = env->NewStringUTF(FullFileName);
|
|
jstring j_FileName = env->NewStringUTF(FileName);
|
|
jstring j_GoodName = env->NewStringUTF(GoodName);
|
|
env->CallStaticVoidMethod(m_GalleryActivityClass, midRomListAddItem, j_FullFileName, j_FileName, j_GoodName, TextColor);
|
|
env->DeleteLocalRef(j_FullFileName);
|
|
env->DeleteLocalRef(j_FileName);
|
|
env->DeleteLocalRef(j_GoodName);
|
|
}
|
|
}
|
|
}
|
|
|
|
void JavaBridge::RomListLoaded(void)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (env)
|
|
{
|
|
jmethodID midRomListLoadDone = env->GetStaticMethodID(m_GalleryActivityClass, "RomListLoadDone", "()V");
|
|
env->CallStaticVoidMethod(m_GalleryActivityClass, midRomListLoadDone);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::DisplayError(const char * Message)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (env)
|
|
{
|
|
jstring j_Message = env->NewStringUTF(Message);
|
|
jmethodID midDisplayError = env->GetStaticMethodID(m_NotifierClass, "DisplayError", "(Landroid/app/Activity;Ljava/lang/String;)V");
|
|
env->CallStaticVoidMethod(m_NotifierClass, midDisplayError,g_Activity,j_Message);
|
|
env->DeleteLocalRef(j_Message);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::DisplayMessage(const char * Message)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (env)
|
|
{
|
|
jstring j_Message = env->NewStringUTF(Message);
|
|
jmethodID midShowToast = env->GetStaticMethodID(m_NotifierClass, "showToast", "(Landroid/app/Activity;Ljava/lang/String;)V");
|
|
env->CallStaticVoidMethod(m_NotifierClass, midShowToast,g_Activity,j_Message);
|
|
env->DeleteLocalRef(j_Message);
|
|
}
|
|
}
|
|
|
|
void JavaBridge::EmulationStopped(void)
|
|
{
|
|
JNIEnv *env = Android_JNI_GetEnv();
|
|
if (g_Activity != NULL && env != NULL)
|
|
{
|
|
jmethodID midEmulationStopped = env->GetStaticMethodID(m_NotifierClass, "EmulationStopped", "(Landroid/app/Activity;)V");
|
|
env->CallStaticVoidMethod(m_NotifierClass, midEmulationStopped, g_Activity);
|
|
}
|
|
}
|
|
|
|
#endif |