ScummVM API documentation
jni-android.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef _ANDROID_JNI_H_
23 #define _ANDROID_JNI_H_
24 
25 #include <jni.h>
26 #include <semaphore.h>
27 #include <pthread.h>
28 
29 #include "common/fs.h"
30 #include "common/archive.h"
31 #include "common/array.h"
32 #include "common/ustr.h"
33 
34 namespace Graphics {
35  struct Surface;
36 }
37 
38 class OSystem_Android;
39 
40 class JNI {
41 private:
42  JNI();
43  virtual ~JNI();
44 
45 public:
46  static bool assets_updated;
47 
48  static bool pause;
49  static sem_t pause_sem;
50 
51  static int surface_changeid;
52  static int egl_surface_width;
53  static int egl_surface_height;
54  static int egl_bits_per_pixel;
55 
56  static bool virt_keyboard_state;
57 
58  static int32 gestures_insets[4];
59  static int32 cutout_insets[4];
60 
61  static jint onLoad(JavaVM *vm);
62 
63  static inline JNIEnv *getEnv() {
64  JNIEnv *env = (JNIEnv*) pthread_getspecific(_env_tls);
65  if (env != nullptr) {
66  return env;
67  }
68 
69  return fetchEnv();
70  }
71 
72  static void attachThread();
73  static void detachThread();
74 
75  static void setReadyForEvents(bool ready);
76  static void wakeupForQuit();
77 
78  static void setWindowCaption(const Common::U32String &caption);
79 
83  typedef float DPIValues[3];
84  static void getDPI(DPIValues &values);
85  static void displayMessageOnOSD(const Common::U32String &msg);
86  static bool openUrl(const Common::String &url);
87  static bool hasTextInClipboard();
88  static Common::U32String getTextFromClipboard();
89  static bool setTextInClipboard(const Common::U32String &text);
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);
96  static void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
97  static Common::String getScummVMBasePath();
98  static Common::String getScummVMAssetsPath();
99  static Common::String getScummVMConfigPath();
100  static Common::String getScummVMLogPath();
101  static jint getAndroidSDKVersionId();
102  static void setCurrentGame(const Common::String &target);
103 
104  static inline bool haveSurface();
105  static inline bool swapBuffers();
106  static bool initSurface();
107  static void deinitSurface();
108  static int eglVersion() {
109  if (_egl_version) {
110  return _egl_version;
111  }
112  return fetchEGLVersion();
113  }
114 
115  static Common::Array<Common::String> getAllStorageLocations();
116 
117  static jobject getNewSAFTree(bool writable, const Common::String &initURI, const Common::String &prompt);
118  static Common::Array<jobject> getSAFTrees();
119  static jobject findSAFTree(const Common::String &name);
120 
121  static int exportBackup(const Common::U32String &prompt);
122  static int importBackup(const Common::U32String &prompt, const Common::String &path);
123 
124 private:
125  static pthread_key_t _env_tls;
126 
127  static JavaVM *_vm;
128  // back pointer to (java) peer instance
129  static jobject _jobj;
130  static jobject _jobj_egl;
131  static jobject _jobj_egl_display;
132  static jobject _jobj_egl_surface;
133  // cached EGL version
134  static int _egl_version;
135 
136  static Common::Archive *_asset_archive;
137  static OSystem_Android *_system;
138 
139  static bool _ready_for_events;
140 
141  static jmethodID _MID_getDPI;
142  static jmethodID _MID_displayMessageOnOSD;
143  static jmethodID _MID_openUrl;
144  static jmethodID _MID_hasTextInClipboard;
145  static jmethodID _MID_getTextFromClipboard;
146  static jmethodID _MID_setTextInClipboard;
147  static jmethodID _MID_isConnectionLimited;
148  static jmethodID _MID_setWindowCaption;
149  static jmethodID _MID_showVirtualKeyboard;
150  static jmethodID _MID_showOnScreenControls;
151  static jmethodID _MID_setTouchMode;
152  static jmethodID _MID_getTouchMode;
153  static jmethodID _MID_setOrientation;
154  static jmethodID _MID_getScummVMBasePath;
155  static jmethodID _MID_getScummVMConfigPath;
156  static jmethodID _MID_getScummVMLogPath;
157  static jmethodID _MID_setCurrentGame;
158  static jmethodID _MID_getSysArchives;
159  static jmethodID _MID_getAllStorageLocations;
160  static jmethodID _MID_initSurface;
161  static jmethodID _MID_deinitSurface;
162  static jmethodID _MID_eglVersion;
163  static jmethodID _MID_getNewSAFTree;
164  static jmethodID _MID_getSAFTrees;
165  static jmethodID _MID_findSAFTree;
166  static jmethodID _MID_exportBackup;
167  static jmethodID _MID_importBackup;
168 
169  static jmethodID _MID_EGL10_eglSwapBuffers;
170 
171  static const JNINativeMethod _natives[];
172 
173  static void throwByName(JNIEnv *env, const char *name, const char *msg);
174  static void throwRuntimeException(JNIEnv *env, const char *msg);
175 
176  // natives for the dark side
177  static void create(JNIEnv *env, jobject self, jobject asset_manager,
178  jobject egl, jobject egl_display,
179  jboolean assets_updated_);
180  static void destroy(JNIEnv *env, jobject self);
181 
182  static void setSurface(JNIEnv *env, jobject self, jint width, jint height, jint bpp);
183  static jint main(JNIEnv *env, jobject self, jobjectArray args);
184 
185  static void pushEvent(JNIEnv *env, jobject self, int type, int arg1,
186  int arg2, int arg3, int arg4, int arg5, int arg6);
187  static void updateTouch(JNIEnv *env, jobject self, int action, int ptr, int x, int y);
188  static void setupTouchMode(JNIEnv *env, jobject self, jint oldValue, jint newValue);
189  static void syncVirtkeyboardState(JNIEnv *env, jobject self, jboolean newState);
190  static void setPause(JNIEnv *env, jobject self, jboolean value);
191 
192  static void systemInsetsUpdated(JNIEnv *env, jobject self, jintArray gestureInsets, jintArray systemInsets, jintArray cutoutInsets);
193 
194  static void setDefaultAudioValues(JNIEnv *env, jclass clazz, jint sampleRate, jint framesPerBurst);
195  static void notifyAudioDisconnect(JNIEnv *env, jclass clazz);
196 
197  static jstring getNativeVersionInfo(JNIEnv *env, jobject self);
198  static jstring convertToJString(JNIEnv *env, const Common::U32String &str);
199  static Common::U32String convertFromJString(JNIEnv *env, const jstring &jstr);
200 
201  static JNIEnv *fetchEnv();
202  static int fetchEGLVersion();
203 };
204 
205 inline bool JNI::haveSurface() {
206  return _jobj_egl_surface != 0;
207 }
208 
209 inline bool JNI::swapBuffers() {
210  JNIEnv *env = JNI::getEnv();
211 
212  return env->CallBooleanMethod(_jobj_egl, _MID_EGL10_eglSwapBuffers,
213  _jobj_egl_display, _jobj_egl_surface);
214 }
215 
216 #endif
Definition: str.h:59
Definition: archive.h:141
Definition: ustr.h:57
Definition: archive.h:330
Definition: jni-android.h:40
Definition: formatinfo.h:28
Definition: android.h:99