22 #ifndef _ANDROID_JNI_H_ 23 #define _ANDROID_JNI_H_ 26 #include <semaphore.h> 29 #include "common/fs.h" 30 #include "common/archive.h" 31 #include "common/array.h" 32 #include "common/ustr.h" 33 #include "engines/engine.h" 47 static bool assets_updated;
50 static sem_t pause_sem;
52 static int surface_changeid;
53 static int egl_surface_width;
54 static int egl_surface_height;
55 static int egl_bits_per_pixel;
57 static bool virt_keyboard_state;
59 static int32 gestures_insets[4];
61 static jint onLoad(JavaVM *vm);
63 static inline JNIEnv *getEnv() {
64 JNIEnv *env = (JNIEnv*) pthread_getspecific(_env_tls);
72 static void attachThread();
73 static void detachThread();
75 static void setReadyForEvents(
bool ready);
76 static void wakeupForQuit();
83 typedef float DPIValues[3];
84 static void getDPI(DPIValues &values);
87 static bool hasTextInClipboard();
90 static bool isConnectionLimited();
91 static void showVirtualKeyboard(
bool enable);
92 static void showOnScreenControls(
int enableMask);
93 static void setTouchMode(
int touchMode);
94 static int getTouchMode();
95 static void setOrientation(
int touchMode);
101 static jint getAndroidSDKVersionId();
104 static inline bool haveSurface();
105 static inline bool swapBuffers();
106 static bool initSurface();
107 static void deinitSurface();
108 static int eglVersion() {
112 return fetchEGLVersion();
115 static void setAudioPause();
116 static void setAudioPlay();
117 static void setAudioStop();
119 static inline int writeAudio(JNIEnv *env, jbyteArray &data,
int offset,
129 static pthread_key_t _env_tls;
133 static jobject _jobj;
134 static jobject _jobj_audio_track;
135 static jobject _jobj_egl;
136 static jobject _jobj_egl_display;
137 static jobject _jobj_egl_surface;
139 static int _egl_version;
144 static bool _ready_for_events;
146 static jmethodID _MID_getDPI;
147 static jmethodID _MID_displayMessageOnOSD;
148 static jmethodID _MID_openUrl;
149 static jmethodID _MID_hasTextInClipboard;
150 static jmethodID _MID_getTextFromClipboard;
151 static jmethodID _MID_setTextInClipboard;
152 static jmethodID _MID_isConnectionLimited;
153 static jmethodID _MID_setWindowCaption;
154 static jmethodID _MID_showVirtualKeyboard;
155 static jmethodID _MID_showOnScreenControls;
156 static jmethodID _MID_setTouchMode;
157 static jmethodID _MID_getTouchMode;
158 static jmethodID _MID_setOrientation;
159 static jmethodID _MID_getScummVMBasePath;
160 static jmethodID _MID_getScummVMConfigPath;
161 static jmethodID _MID_getScummVMLogPath;
162 static jmethodID _MID_setCurrentGame;
163 static jmethodID _MID_getSysArchives;
164 static jmethodID _MID_getAllStorageLocations;
165 static jmethodID _MID_initSurface;
166 static jmethodID _MID_deinitSurface;
167 static jmethodID _MID_eglVersion;
168 static jmethodID _MID_getNewSAFTree;
169 static jmethodID _MID_getSAFTrees;
170 static jmethodID _MID_findSAFTree;
172 static jmethodID _MID_EGL10_eglSwapBuffers;
174 static jmethodID _MID_AudioTrack_flush;
175 static jmethodID _MID_AudioTrack_pause;
176 static jmethodID _MID_AudioTrack_play;
177 static jmethodID _MID_AudioTrack_stop;
178 static jmethodID _MID_AudioTrack_write;
180 static const JNINativeMethod _natives[];
182 static void throwByName(JNIEnv *env,
const char *name,
const char *msg);
183 static void throwRuntimeException(JNIEnv *env,
const char *msg);
186 static void create(JNIEnv *env, jobject
self, jobject asset_manager,
187 jobject egl, jobject egl_display,
188 jobject at, jint audio_sample_rate,
189 jint audio_buffer_size,
190 jboolean assets_updated_);
191 static void destroy(JNIEnv *env, jobject
self);
193 static void setSurface(JNIEnv *env, jobject
self, jint width, jint height, jint bpp);
194 static jint main(JNIEnv *env, jobject
self, jobjectArray args);
196 static void pushEvent(JNIEnv *env, jobject
self,
int type,
int arg1,
197 int arg2,
int arg3,
int arg4,
int arg5,
int arg6);
198 static void updateTouch(JNIEnv *env, jobject
self,
int action,
int ptr,
int x,
int y);
199 static void setupTouchMode(JNIEnv *env, jobject
self, jint oldValue, jint newValue);
200 static void syncVirtkeyboardState(JNIEnv *env, jobject
self, jboolean newState);
201 static void setPause(JNIEnv *env, jobject
self, jboolean value);
203 static void systemInsetsUpdated(JNIEnv *env, jobject
self, jintArray gestureInsets, jintArray systemInsets, jintArray cutoutInsets);
205 static jstring getNativeVersionInfo(JNIEnv *env, jobject
self);
211 static JNIEnv *fetchEnv();
212 static int fetchEGLVersion();
215 inline bool JNI::haveSurface() {
216 return _jobj_egl_surface != 0;
219 inline bool JNI::swapBuffers() {
220 JNIEnv *env = JNI::getEnv();
222 return env->CallBooleanMethod(_jobj_egl, _MID_EGL10_eglSwapBuffers,
223 _jobj_egl_display, _jobj_egl_surface);
226 inline int JNI::writeAudio(JNIEnv *env, jbyteArray &data,
int offset,
int size) {
227 return env->CallIntMethod(_jobj_audio_track, _MID_AudioTrack_write, data,
Definition: archive.h:141
Definition: archive.h:312
Definition: jni-android.h:41
Definition: formatinfo.h:28