author | Philipp Wiesemann <philipp.wiesemann@arcor.de> |
Tue, 09 Dec 2014 22:49:16 +0100 | |
changeset 9268 | 7f2833a2191b |
parent 9231 | ec22701132b5 |
child 9271 | 8f71cb5dc099 |
permissions | -rw-r--r-- |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 |
/* |
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
2 |
Simple DirectMedia Layer |
8149
681eb46b8ac4
Fixed bug 2374 - Update copyright for 2014...
Sam Lantinga <slouken@libsdl.org>
parents:
8140
diff
changeset
|
3 |
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
5 |
This software is provided 'as-is', without any express or implied |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
6 |
warranty. In no event will the authors be held liable for any damages |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
7 |
arising from the use of this software. |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
9 |
Permission is granted to anyone to use this software for any purpose, |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
10 |
including commercial applications, and to alter it and redistribute it |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
11 |
freely, subject to the following restrictions: |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 |
|
5535
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
13 |
1. The origin of this software must not be misrepresented; you must not |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
14 |
claim that you wrote the original software. If you use this software |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
15 |
in a product, an acknowledgment in the product documentation would be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
16 |
appreciated but is not required. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
17 |
2. Altered source versions must be plainly marked as such, and must not be |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
18 |
misrepresented as being the original software. |
96594ac5fd1a
SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents:
5262
diff
changeset
|
19 |
3. This notice may not be removed or altered from any source distribution. |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 |
*/ |
8093
b43765095a6f
Make internal SDL sources include SDL_internal.h instead of SDL_config.h
Ryan C. Gordon <icculus@icculus.org>
parents:
8057
diff
changeset
|
21 |
#include "../../SDL_internal.h" |
5222
c66b2a778b7e
Try to create an OpenGL ES 2.0 context on Android and successfully fall back to OpenGL ES 1.1 if that fails.
Sam Lantinga <slouken@libsdl.org>
parents:
5092
diff
changeset
|
22 |
#include "SDL_stdinc.h" |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
23 |
#include "SDL_assert.h" |
8961
7dbbee37826b
Fixed compiler warning on Android
Sam Lantinga <slouken@libsdl.org>
parents:
8900
diff
changeset
|
24 |
#include "SDL_hints.h" |
6650
d36232135316
Added information on running valgrind on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6642
diff
changeset
|
25 |
#include "SDL_log.h" |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
|
6044
35448a5ea044
Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents:
5996
diff
changeset
|
27 |
#ifdef __ANDROID__ |
35448a5ea044
Lots of fixes importing SDL source wholesale into a new iOS project
Sam Lantinga <slouken@libsdl.org>
parents:
5996
diff
changeset
|
28 |
|
6630
55910871076b
Added some platform specific API functions for Android:
Sam Lantinga <slouken@libsdl.org>
parents:
6555
diff
changeset
|
29 |
#include "SDL_system.h" |
4989 | 30 |
#include "SDL_android.h" |
6792
a15821a3471f
Fixed bug 1616 - SDL does not use values set with SDL_GL_SetAttribute on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6654
diff
changeset
|
31 |
#include <EGL/egl.h> |
4989 | 32 |
|
5092 | 33 |
#include "../../events/SDL_events_c.h" |
34 |
#include "../../video/android/SDL_androidkeyboard.h" |
|
35 |
#include "../../video/android/SDL_androidtouch.h" |
|
36 |
#include "../../video/android/SDL_androidvideo.h" |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
37 |
#include "../../video/android/SDL_androidwindow.h" |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
38 |
#include "../../joystick/android/SDL_sysjoystick_c.h" |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
39 |
|
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
40 |
#include <android/log.h> |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
41 |
#include <pthread.h> |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
42 |
#include <sys/types.h> |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
43 |
#include <unistd.h> |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
44 |
#define LOG_TAG "SDL_android" |
7678
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
45 |
/* #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) */ |
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
46 |
/* #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) */ |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
47 |
#define LOGI(...) do {} while (false) |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
48 |
#define LOGE(...) do {} while (false) |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
49 |
|
6650
d36232135316
Added information on running valgrind on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6642
diff
changeset
|
50 |
/* Uncomment this to log messages entering and exiting methods in this file */ |
7678
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
51 |
/* #define DEBUG_JNI */ |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
52 |
|
7246
be3beed886ea
Moved prototype for static function out of header file to prevent warnings.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
7191
diff
changeset
|
53 |
static void Android_JNI_ThreadDestroyed(void*); |
4980
d9fdff945ec9
A bit of cleanup in the Android driver
Sam Lantinga <slouken@libsdl.org>
parents:
4964
diff
changeset
|
54 |
|
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
/******************************************************************************* |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 |
This file links the Java side of Android with libsdl |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 |
*******************************************************************************/ |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 |
#include <jni.h> |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 |
#include <android/log.h> |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
60 |
#include <stdbool.h> |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 |
|
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 |
|
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 |
/******************************************************************************* |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 |
Globals |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 |
*******************************************************************************/ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
66 |
static pthread_key_t mThreadKey; |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
67 |
static JavaVM* mJavaVM; |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
69 |
/* Main activity */ |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
70 |
static jclass mActivityClass; |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
72 |
/* method signatures */ |
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
73 |
static jmethodID midGetNativeSurface; |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
74 |
static jmethodID midFlipBuffers; |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
75 |
static jmethodID midAudioInit; |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
76 |
static jmethodID midAudioWriteShortBuffer; |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
77 |
static jmethodID midAudioWriteByteBuffer; |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
78 |
static jmethodID midAudioQuit; |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
79 |
static jmethodID midPollInputDevices; |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
81 |
/* Accelerometer data storage */ |
5000
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
82 |
static float fLastAccelerometer[3]; |
6212
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
83 |
static bool bHasNewData; |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 |
|
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 |
/******************************************************************************* |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 |
Functions called by JNI |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 |
*******************************************************************************/ |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
89 |
/* Library init */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
90 |
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 |
{ |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
92 |
JNIEnv *env; |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
93 |
mJavaVM = vm; |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
94 |
LOGI("JNI_OnLoad called"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
95 |
if ((*mJavaVM)->GetEnv(mJavaVM, (void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
96 |
LOGE("Failed to get the environment using GetEnv()"); |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
97 |
return -1; |
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
98 |
} |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
99 |
/* |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
100 |
* Create mThreadKey so we can keep track of the JNIEnv assigned to each thread |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
101 |
* Refer to http://developer.android.com/guide/practices/design/jni.html for the rationale behind this |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
102 |
*/ |
8055
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
103 |
if (pthread_key_create(&mThreadKey, Android_JNI_ThreadDestroyed) != 0) { |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
104 |
__android_log_print(ANDROID_LOG_ERROR, "SDL", "Error initializing pthread key"); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
105 |
} |
8055
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
106 |
Android_JNI_SetupThread(); |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
107 |
|
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 |
return JNI_VERSION_1_4; |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
111 |
/* Called before SDL_main() to initialize JNI bindings */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
112 |
JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 |
{ |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 |
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init()"); |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 |
|
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
116 |
Android_JNI_SetupThread(); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
117 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
118 |
mActivityClass = (jclass)((*mEnv)->NewGlobalRef(mEnv, cls)); |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
119 |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
120 |
midGetNativeSurface = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
121 |
"getNativeSurface","()Landroid/view/Surface;"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
122 |
midFlipBuffers = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
123 |
"flipBuffers","()V"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
124 |
midAudioInit = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
7552
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
125 |
"audioInit", "(IZZI)I"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
126 |
midAudioWriteShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
127 |
"audioWriteShortBuffer", "([S)V"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
128 |
midAudioWriteByteBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
129 |
"audioWriteByteBuffer", "([B)V"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
130 |
midAudioQuit = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
131 |
"audioQuit", "()V"); |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
132 |
midPollInputDevices = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
133 |
"pollInputDevices", "()V"); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 |
|
6212
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
135 |
bHasNewData = false; |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
136 |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
137 |
if(!midGetNativeSurface || !midFlipBuffers || !midAudioInit || |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
138 |
!midAudioWriteShortBuffer || !midAudioWriteByteBuffer || !midAudioQuit || !midPollInputDevices) { |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
139 |
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java callbacks, check that they're named and typed correctly"); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 |
} |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
141 |
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!"); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
144 |
/* Resize */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
145 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
146 |
JNIEnv* env, jclass jcls, |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
147 |
jint width, jint height, jint format) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 |
{ |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
149 |
Android_SetScreenResolution(width, height, format); |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
150 |
} |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
151 |
|
8776
29aac8b813d9
Changed C++ style comments to fix pedantic warnings.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
8760
diff
changeset
|
152 |
/* Paddown */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
153 |
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_onNativePadDown( |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
154 |
JNIEnv* env, jclass jcls, |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
155 |
jint device_id, jint keycode) |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
156 |
{ |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
157 |
return Android_OnPadDown(device_id, keycode); |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
158 |
} |
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
159 |
|
8776
29aac8b813d9
Changed C++ style comments to fix pedantic warnings.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
8760
diff
changeset
|
160 |
/* Padup */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
161 |
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_onNativePadUp( |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
162 |
JNIEnv* env, jclass jcls, |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
163 |
jint device_id, jint keycode) |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
164 |
{ |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
165 |
return Android_OnPadUp(device_id, keycode); |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
166 |
} |
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
167 |
|
7926
2d2a85852f74
Corrected source comment.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
7910
diff
changeset
|
168 |
/* Joy */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
169 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeJoy( |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
170 |
JNIEnv* env, jclass jcls, |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
171 |
jint device_id, jint axis, jfloat value) |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
172 |
{ |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
173 |
Android_OnJoy(device_id, axis, value); |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
174 |
} |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
175 |
|
8140
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
176 |
/* POV Hat */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
177 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeHat( |
8140
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
178 |
JNIEnv* env, jclass jcls, |
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
179 |
jint device_id, jint hat_id, jint x, jint y) |
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
180 |
{ |
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
181 |
Android_OnHat(device_id, hat_id, x, y); |
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
182 |
} |
8372466c003c
fixed hat code validation.
dbrady <dbrady@telltalegames.com>
parents:
8093
diff
changeset
|
183 |
|
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
184 |
|
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
185 |
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeAddJoystick( |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
186 |
JNIEnv* env, jclass jcls, |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
187 |
jint device_id, jstring device_name, jint is_accelerometer, |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
188 |
jint nbuttons, jint naxes, jint nhats, jint nballs) |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
189 |
{ |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
190 |
int retval; |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
191 |
const char *name = (*env)->GetStringUTFChars(env, device_name, NULL); |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
192 |
|
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
193 |
retval = Android_AddJoystick(device_id, name, (SDL_bool) is_accelerometer, nbuttons, naxes, nhats, nballs); |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
194 |
|
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
195 |
(*env)->ReleaseStringUTFChars(env, device_name, name); |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
196 |
|
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
197 |
return retval; |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
198 |
} |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
199 |
|
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
200 |
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeRemoveJoystick( |
8057
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
201 |
JNIEnv* env, jclass jcls, jint device_id) |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
202 |
{ |
801d84e26f91
[Android] Hotplugging support for joysticks
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8055
diff
changeset
|
203 |
return Android_RemoveJoystick(device_id); |
7907
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
204 |
} |
24b4e98c6010
Adds Joystick support for Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7863
diff
changeset
|
205 |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
206 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
207 |
/* Surface Created */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
208 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeSurfaceChanged(JNIEnv* env, jclass jcls) |
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
209 |
{ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
210 |
SDL_WindowData *data; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
211 |
SDL_VideoDevice *_this; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
212 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
213 |
if (Android_Window == NULL || Android_Window->driverdata == NULL ) { |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
214 |
return; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
215 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
216 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
217 |
_this = SDL_GetVideoDevice(); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
218 |
data = (SDL_WindowData *) Android_Window->driverdata; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
219 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
220 |
/* If the surface has been previously destroyed by onNativeSurfaceDestroyed, recreate it here */ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
221 |
if (data->egl_surface == EGL_NO_SURFACE) { |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
222 |
if(data->native_window) { |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
223 |
ANativeWindow_release(data->native_window); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
224 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
225 |
data->native_window = Android_JNI_GetNativeWindow(); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
226 |
data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
227 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
228 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
229 |
/* GL Context handling is done in the event loop because this function is run from the Java thread */ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
230 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
231 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
232 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
233 |
/* Surface Destroyed */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
234 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeSurfaceDestroyed(JNIEnv* env, jclass jcls) |
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
235 |
{ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
236 |
/* We have to clear the current context and destroy the egl surface here |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
237 |
* Otherwise there's BAD_NATIVE_WINDOW errors coming from eglCreateWindowSurface on resume |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
238 |
* Ref: http://stackoverflow.com/questions/8762589/eglcreatewindowsurface-on-ics-and-switching-from-2d-to-3d |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
239 |
*/ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
240 |
SDL_WindowData *data; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
241 |
SDL_VideoDevice *_this; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
242 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
243 |
if (Android_Window == NULL || Android_Window->driverdata == NULL ) { |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
244 |
return; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
245 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
246 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
247 |
_this = SDL_GetVideoDevice(); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
248 |
data = (SDL_WindowData *) Android_Window->driverdata; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
249 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
250 |
if (data->egl_surface != EGL_NO_SURFACE) { |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
251 |
SDL_EGL_MakeCurrent(_this, NULL, NULL); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
252 |
SDL_EGL_DestroySurface(_this, data->egl_surface); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
253 |
data->egl_surface = EGL_NO_SURFACE; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
254 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
255 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
256 |
/* GL Context handling is done in the event loop because this function is run from the Java thread */ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
257 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
258 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
259 |
|
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
260 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeFlipBuffers(JNIEnv* env, jclass jcls) |
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
261 |
{ |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
262 |
SDL_GL_SwapWindow(Android_Window); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
263 |
} |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
264 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
265 |
/* Keydown */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
266 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyDown( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
267 |
JNIEnv* env, jclass jcls, jint keycode) |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
268 |
{ |
4980
d9fdff945ec9
A bit of cleanup in the Android driver
Sam Lantinga <slouken@libsdl.org>
parents:
4964
diff
changeset
|
269 |
Android_OnKeyDown(keycode); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
272 |
/* Keyup */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
273 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyUp( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
274 |
JNIEnv* env, jclass jcls, jint keycode) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
{ |
4980
d9fdff945ec9
A bit of cleanup in the Android driver
Sam Lantinga <slouken@libsdl.org>
parents:
4964
diff
changeset
|
276 |
Android_OnKeyUp(keycode); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
279 |
/* Keyboard Focus Lost */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
280 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyboardFocusLost( |
7564
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
281 |
JNIEnv* env, jclass jcls) |
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
282 |
{ |
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
283 |
/* Calling SDL_StopTextInput will take care of hiding the keyboard and cleaning up the DummyText widget */ |
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
284 |
SDL_StopTextInput(); |
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
285 |
} |
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
286 |
|
d2bc997ef5d6
Temporary fix for bug #1639 SDL does not message back closing of screen keyboard
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7552
diff
changeset
|
287 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
288 |
/* Touch */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
289 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeTouch( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
290 |
JNIEnv* env, jclass jcls, |
5982
f324bd81b52c
Added support for multitouch on Android.
Ryan C. Gordon <icculus@icculus.org>
parents:
5860
diff
changeset
|
291 |
jint touch_device_id_in, jint pointer_finger_id_in, |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
292 |
jint action, jfloat x, jfloat y, jfloat p) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 |
{ |
5982
f324bd81b52c
Added support for multitouch on Android.
Ryan C. Gordon <icculus@icculus.org>
parents:
5860
diff
changeset
|
294 |
Android_OnTouch(touch_device_id_in, pointer_finger_id_in, action, x, y, p); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
297 |
/* Accelerometer */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
298 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeAccel( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
299 |
JNIEnv* env, jclass jcls, |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
300 |
jfloat x, jfloat y, jfloat z) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
{ |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 |
fLastAccelerometer[0] = x; |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 |
fLastAccelerometer[1] = y; |
6212
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
304 |
fLastAccelerometer[2] = z; |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
305 |
bHasNewData = true; |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
308 |
/* Low memory */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
309 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeLowMemory( |
7190
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
310 |
JNIEnv* env, jclass cls) |
7191
75360622e65f
File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents:
7190
diff
changeset
|
311 |
{ |
7190
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
312 |
SDL_SendAppEvent(SDL_APP_LOWMEMORY); |
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
313 |
} |
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
314 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
315 |
/* Quit */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
316 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeQuit( |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
317 |
JNIEnv* env, jclass cls) |
7191
75360622e65f
File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents:
7190
diff
changeset
|
318 |
{ |
7910
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
319 |
/* Discard previous events. The user should have handled state storage |
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
320 |
* in SDL_APP_WILLENTERBACKGROUND. After nativeQuit() is called, no |
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
321 |
* events other than SDL_QUIT and SDL_APP_TERMINATING should fire */ |
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
322 |
SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); |
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
323 |
/* Inject a SDL_QUIT event */ |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
324 |
SDL_SendQuit(); |
7190
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
325 |
SDL_SendAppEvent(SDL_APP_TERMINATING); |
7910
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
326 |
/* Resume the event loop so that the app can catch SDL_QUIT which |
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
327 |
* should now be the top event in the event queue. */ |
261addaa47d0
[Android] Fixes Bug 2041 - can't get SDL_QUIT event...
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7907
diff
changeset
|
328 |
if (!SDL_SemValue(Android_ResumeSem)) SDL_SemPost(Android_ResumeSem); |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
329 |
} |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
330 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
331 |
/* Pause */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
332 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativePause( |
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
333 |
JNIEnv* env, jclass cls) |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
334 |
{ |
8039
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
335 |
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()"); |
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
336 |
if (Android_Window) { |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
337 |
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0); |
6191
2c0d35b1af4e
Made the application activity events consistent between iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
6189
diff
changeset
|
338 |
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); |
8039
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
339 |
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); |
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
340 |
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); |
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
341 |
|
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
342 |
/* *After* sending the relevant events, signal the pause semaphore |
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
343 |
* so the event loop knows to pause and (optionally) block itself */ |
3b0346b37e0f
Improve Android pause/resume behavior.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8029
diff
changeset
|
344 |
if (!SDL_SemValue(Android_PauseSem)) SDL_SemPost(Android_PauseSem); |
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
345 |
} |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
346 |
} |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
347 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
348 |
/* Resume */ |
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
349 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeResume( |
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
350 |
JNIEnv* env, jclass cls) |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
351 |
{ |
7190
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
352 |
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeResume()"); |
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
353 |
|
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
354 |
if (Android_Window) { |
8047
a5270cef21a7
[Android] Signal the resume semaphore after pushing the relevant events
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8039
diff
changeset
|
355 |
SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND); |
a5270cef21a7
[Android] Signal the resume semaphore after pushing the relevant events
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8039
diff
changeset
|
356 |
SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND); |
a5270cef21a7
[Android] Signal the resume semaphore after pushing the relevant events
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8039
diff
changeset
|
357 |
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0); |
a5270cef21a7
[Android] Signal the resume semaphore after pushing the relevant events
Gabriel Jacobo <gabomdq@gmail.com>
parents:
8039
diff
changeset
|
358 |
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0); |
6330
0fa55ca2efdd
Fixes #1422, restores GL context automatically under Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6308
diff
changeset
|
359 |
/* Signal the resume semaphore so the event loop knows to resume and restore the GL Context |
0fa55ca2efdd
Fixes #1422, restores GL context automatically under Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6308
diff
changeset
|
360 |
* We can't restore the GL Context here because it needs to be done on the SDL main thread |
0fa55ca2efdd
Fixes #1422, restores GL context automatically under Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6308
diff
changeset
|
361 |
* and this function will be called from the Java thread instead. |
0fa55ca2efdd
Fixes #1422, restores GL context automatically under Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6308
diff
changeset
|
362 |
*/ |
0fa55ca2efdd
Fixes #1422, restores GL context automatically under Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6308
diff
changeset
|
363 |
if (!SDL_SemValue(Android_ResumeSem)) SDL_SemPost(Android_ResumeSem); |
6186
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
364 |
} |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
365 |
} |
e565ac981de6
Fixed bug 1293 - [Android] Support Pause/Resume
Sam Lantinga <slouken@libsdl.org>
parents:
6138
diff
changeset
|
366 |
|
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
367 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLInputConnection_nativeCommitText( |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
368 |
JNIEnv* env, jclass cls, |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
369 |
jstring text, jint newCursorPosition) |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
370 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
371 |
const char *utftext = (*env)->GetStringUTFChars(env, text, NULL); |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
372 |
|
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
373 |
SDL_SendKeyboardText(utftext); |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
374 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
375 |
(*env)->ReleaseStringUTFChars(env, text, utftext); |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
376 |
} |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
377 |
|
8760
27eedcca604d
Export android jni functions even when build with -fvisibility=hidden flag
Dimitris Zenios <dimitris.zenios@gmail.com>
parents:
8149
diff
changeset
|
378 |
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLInputConnection_nativeSetComposingText( |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
379 |
JNIEnv* env, jclass cls, |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
380 |
jstring text, jint newCursorPosition) |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
381 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
382 |
const char *utftext = (*env)->GetStringUTFChars(env, text, NULL); |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
383 |
|
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
384 |
SDL_SendEditingText(utftext, 0, 0); |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
385 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
386 |
(*env)->ReleaseStringUTFChars(env, text, utftext); |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
387 |
} |
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
388 |
|
9268
7f2833a2191b
Fixed bug 2811 - [patch] Android core: Fix JNI 'nativeGetHint' symbol not being exported
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
9231
diff
changeset
|
389 |
JNIEXPORT jstring JNICALL Java_org_libsdl_app_SDLActivity_nativeGetHint(JNIEnv* env, jclass cls, jstring name) { |
8896
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
390 |
const char *utfname = (*env)->GetStringUTFChars(env, name, NULL); |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
391 |
const char *hint = SDL_GetHint(utfname); |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
392 |
|
8896
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
393 |
jstring result = (*env)->NewStringUTF(env, hint); |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
394 |
(*env)->ReleaseStringUTFChars(env, name, utfname); |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
395 |
|
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
396 |
return result; |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
397 |
} |
6555
f2c03c06d987
Fixed bug 1614 - SDL for Android does not implement TextInput API
Sam Lantinga <slouken@libsdl.org>
parents:
6464
diff
changeset
|
398 |
|
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 |
/******************************************************************************* |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 |
Functions called by SDL into Java |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 |
*******************************************************************************/ |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
402 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
403 |
static int s_active = 0; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
404 |
struct LocalReferenceHolder |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
405 |
{ |
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
406 |
JNIEnv *m_env; |
6650
d36232135316
Added information on running valgrind on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6642
diff
changeset
|
407 |
const char *m_func; |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
408 |
}; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
409 |
|
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
410 |
static struct LocalReferenceHolder LocalReferenceHolder_Setup(const char *func) |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
411 |
{ |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
412 |
struct LocalReferenceHolder refholder; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
413 |
refholder.m_env = NULL; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
414 |
refholder.m_func = func; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
415 |
#ifdef DEBUG_JNI |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
416 |
SDL_Log("Entering function %s", func); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
417 |
#endif |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
418 |
return refholder; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
419 |
} |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
420 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
421 |
static SDL_bool LocalReferenceHolder_Init(struct LocalReferenceHolder *refholder, JNIEnv *env) |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
422 |
{ |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
423 |
const int capacity = 16; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
424 |
if ((*env)->PushLocalFrame(env, capacity) < 0) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
425 |
SDL_SetError("Failed to allocate enough JVM local references"); |
7516
4a98853e8e4c
Corrected return value to be of correct type.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
7515
diff
changeset
|
426 |
return SDL_FALSE; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
427 |
} |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
428 |
++s_active; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
429 |
refholder->m_env = env; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
430 |
return SDL_TRUE; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
431 |
} |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
432 |
|
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
433 |
static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
434 |
{ |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
435 |
#ifdef DEBUG_JNI |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
436 |
SDL_Log("Leaving function %s", refholder->m_func); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
437 |
#endif |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
438 |
if (refholder->m_env) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
439 |
JNIEnv* env = refholder->m_env; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
440 |
(*env)->PopLocalFrame(env, NULL); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
441 |
--s_active; |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
442 |
} |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
443 |
} |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
444 |
|
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
445 |
static SDL_bool LocalReferenceHolder_IsActive() |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
446 |
{ |
9173
c677ab1148c5
Bug 2739 - [Android] No support for SDL_DisableScreenSaver by Martin Gerhardy
Gabriel Jacobo <gabomdq@gmail.com>
parents:
9135
diff
changeset
|
447 |
return s_active > 0; |
c677ab1148c5
Bug 2739 - [Android] No support for SDL_DisableScreenSaver by Martin Gerhardy
Gabriel Jacobo <gabomdq@gmail.com>
parents:
9135
diff
changeset
|
448 |
} |
c677ab1148c5
Bug 2739 - [Android] No support for SDL_DisableScreenSaver by Martin Gerhardy
Gabriel Jacobo <gabomdq@gmail.com>
parents:
9135
diff
changeset
|
449 |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
450 |
ANativeWindow* Android_JNI_GetNativeWindow(void) |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 |
{ |
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
452 |
ANativeWindow* anw; |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
453 |
jobject s; |
6792
a15821a3471f
Fixed bug 1616 - SDL does not use values set with SDL_GL_SetAttribute on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6654
diff
changeset
|
454 |
JNIEnv *env = Android_JNI_GetEnv(); |
a15821a3471f
Fixed bug 1616 - SDL does not use values set with SDL_GL_SetAttribute on Android
Sam Lantinga <slouken@libsdl.org>
parents:
6654
diff
changeset
|
455 |
|
7659
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
456 |
s = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetNativeSurface); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
457 |
anw = ANativeWindow_fromSurface(env, s); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
458 |
(*env)->DeleteLocalRef(env, s); |
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
459 |
|
ac4ce59c40e7
Fixes bug #2037, common EGL code for Android and X11
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7612
diff
changeset
|
460 |
return anw; |
7567
52da75545aaa
Fixes bug #1889, allows for GL Context deletion/recreation on Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7564
diff
changeset
|
461 |
} |
52da75545aaa
Fixes bug #1889, allows for GL Context deletion/recreation on Android
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7564
diff
changeset
|
462 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
463 |
void Android_JNI_SwapWindow() |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 |
{ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
465 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
466 |
(*mEnv)->CallStaticVoidMethod(mEnv, mActivityClass, midFlipBuffers); |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
467 |
} |
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
468 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
469 |
void Android_JNI_SetActivityTitle(const char *title) |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
470 |
{ |
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
471 |
jmethodID mid; |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
472 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
473 |
mid = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,"setActivityTitle","(Ljava/lang/String;)Z"); |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
474 |
if (mid) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
475 |
jstring jtitle = (jstring)((*mEnv)->NewStringUTF(mEnv, title)); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
476 |
(*mEnv)->CallStaticBooleanMethod(mEnv, mActivityClass, mid, jtitle); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
477 |
(*mEnv)->DeleteLocalRef(mEnv, jtitle); |
4998
a514bfe6952a
The window is changed to reflect the actual screen dimensions, for now.
Sam Lantinga <slouken@libsdl.org>
parents:
4997
diff
changeset
|
478 |
} |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 |
} |
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
480 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
481 |
SDL_bool Android_JNI_GetAccelerometerValues(float values[3]) |
5000
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
482 |
{ |
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
483 |
int i; |
6212
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
484 |
SDL_bool retval = SDL_FALSE; |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
485 |
|
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
486 |
if (bHasNewData) { |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
487 |
for (i = 0; i < 3; ++i) { |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
488 |
values[i] = fLastAccelerometer[i]; |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
489 |
} |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
490 |
bHasNewData = false; |
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
491 |
retval = SDL_TRUE; |
5000
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
492 |
} |
6212
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
493 |
|
78d854de3a66
Fixed bug 1368 - Enabling joystick subsystem cause an infinite loop
Sam Lantinga <slouken@libsdl.org>
parents:
6191
diff
changeset
|
494 |
return retval; |
5000
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
495 |
} |
6a10693e66c3
Cleaned up internal accelerometer interface
Sam Lantinga <slouken@libsdl.org>
parents:
4998
diff
changeset
|
496 |
|
8055
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
497 |
static void Android_JNI_ThreadDestroyed(void* value) |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
498 |
{ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
499 |
/* The thread is being destroyed, detach it from the Java VM and set the mThreadKey value to NULL as required */ |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
500 |
JNIEnv *env = (JNIEnv*) value; |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
501 |
if (env != NULL) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
502 |
(*mJavaVM)->DetachCurrentThread(mJavaVM); |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
503 |
pthread_setspecific(mThreadKey, NULL); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
504 |
} |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
505 |
} |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
506 |
|
8055
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
507 |
JNIEnv* Android_JNI_GetEnv(void) |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
508 |
{ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
509 |
/* From http://developer.android.com/guide/practices/jni.html |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
510 |
* All threads are Linux threads, scheduled by the kernel. |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
511 |
* They're usually started from managed code (using Thread.start), but they can also be created elsewhere and then |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
512 |
* attached to the JavaVM. For example, a thread started with pthread_create can be attached with the |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
513 |
* JNI AttachCurrentThread or AttachCurrentThreadAsDaemon functions. Until a thread is attached, it has no JNIEnv, |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
514 |
* and cannot make JNI calls. |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
515 |
* Attaching a natively-created thread causes a java.lang.Thread object to be constructed and added to the "main" |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
516 |
* ThreadGroup, making it visible to the debugger. Calling AttachCurrentThread on an already-attached thread |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
517 |
* is a no-op. |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
518 |
* Note: You can call this function any number of times for the same thread, there's no harm in it |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
519 |
*/ |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
520 |
|
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
521 |
JNIEnv *env; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
522 |
int status = (*mJavaVM)->AttachCurrentThread(mJavaVM, &env, NULL); |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
523 |
if(status < 0) { |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
524 |
LOGE("failed to attach current thread"); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
525 |
return 0; |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
526 |
} |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
527 |
|
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
528 |
/* From http://developer.android.com/guide/practices/jni.html |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
529 |
* Threads attached through JNI must call DetachCurrentThread before they exit. If coding this directly is awkward, |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
530 |
* in Android 2.0 (Eclair) and higher you can use pthread_key_create to define a destructor function that will be |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
531 |
* called before the thread exits, and call DetachCurrentThread from there. (Use that key with pthread_setspecific |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
532 |
* to store the JNIEnv in thread-local-storage; that way it'll be passed into your destructor as the argument.) |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
533 |
* Note: The destructor is not called unless the stored value is != NULL |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
534 |
* Note: You can call this function any number of times for the same thread, there's no harm in it |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
535 |
* (except for some lost CPU cycles) |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
536 |
*/ |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
537 |
pthread_setspecific(mThreadKey, (void*) env); |
8055
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
538 |
|
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
539 |
return env; |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
540 |
} |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
541 |
|
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
542 |
int Android_JNI_SetupThread(void) |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
543 |
{ |
3e2f230a6d62
Associate the environment with any thread that calls Android_JNI_GetEnv(), in case it's been manually created with pthread_create() or C++11.
Sam Lantinga <slouken@libsdl.org>
parents:
8047
diff
changeset
|
544 |
Android_JNI_GetEnv(); |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
545 |
return 1; |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
546 |
} |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
547 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
548 |
/* |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
549 |
* Audio support |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
550 |
*/ |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
551 |
static jboolean audioBuffer16Bit = JNI_FALSE; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
552 |
static jboolean audioBufferStereo = JNI_FALSE; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
553 |
static jobject audioBuffer = NULL; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
554 |
static void* audioBufferPinned = NULL; |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
555 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
556 |
int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames) |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
557 |
{ |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
558 |
int audioBufferFrames; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
559 |
|
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
560 |
JNIEnv *env = Android_JNI_GetEnv(); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
561 |
|
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
562 |
if (!env) { |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
563 |
LOGE("callback_handler: failed to attach current thread"); |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
564 |
} |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
565 |
Android_JNI_SetupThread(); |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
566 |
|
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
567 |
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
568 |
audioBuffer16Bit = is16Bit; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
569 |
audioBufferStereo = channelCount > 1; |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
570 |
|
7552
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
571 |
if ((*env)->CallStaticIntMethod(env, mActivityClass, midAudioInit, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames) != 0) { |
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
572 |
/* Error during audio initialization */ |
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
573 |
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: error on AudioTrack initialization!"); |
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
574 |
return 0; |
463f78515a07
Fix for bug 2001, verify that the AudioTrack is properly initialized
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7516
diff
changeset
|
575 |
} |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
576 |
|
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
577 |
/* Allocating the audio buffer from the Java side and passing it as the return value for audioInit no longer works on |
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
578 |
* Android >= 4.2 due to a "stale global reference" error. So now we allocate this buffer directly from this side. */ |
7191
75360622e65f
File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents:
7190
diff
changeset
|
579 |
|
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
580 |
if (is16Bit) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
581 |
jshortArray audioBufferLocal = (*env)->NewShortArray(env, desiredBufferFrames * (audioBufferStereo ? 2 : 1)); |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
582 |
if (audioBufferLocal) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
583 |
audioBuffer = (*env)->NewGlobalRef(env, audioBufferLocal); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
584 |
(*env)->DeleteLocalRef(env, audioBufferLocal); |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
585 |
} |
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
586 |
} |
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
587 |
else { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
588 |
jbyteArray audioBufferLocal = (*env)->NewByteArray(env, desiredBufferFrames * (audioBufferStereo ? 2 : 1)); |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
589 |
if (audioBufferLocal) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
590 |
audioBuffer = (*env)->NewGlobalRef(env, audioBufferLocal); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
591 |
(*env)->DeleteLocalRef(env, audioBufferLocal); |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
592 |
} |
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
593 |
} |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
594 |
|
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
595 |
if (audioBuffer == NULL) { |
6802
8a6b8ce97656
Fix Audio Buffer allocation on Android >= 4.2
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6792
diff
changeset
|
596 |
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: could not allocate an audio buffer!"); |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
597 |
return 0; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
598 |
} |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
599 |
|
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
600 |
jboolean isCopy = JNI_FALSE; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
601 |
if (audioBuffer16Bit) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
602 |
audioBufferPinned = (*env)->GetShortArrayElements(env, (jshortArray)audioBuffer, &isCopy); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
603 |
audioBufferFrames = (*env)->GetArrayLength(env, (jshortArray)audioBuffer); |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
604 |
} else { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
605 |
audioBufferPinned = (*env)->GetByteArrayElements(env, (jbyteArray)audioBuffer, &isCopy); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
606 |
audioBufferFrames = (*env)->GetArrayLength(env, (jbyteArray)audioBuffer); |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
607 |
} |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
608 |
if (audioBufferStereo) { |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
609 |
audioBufferFrames /= 2; |
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
610 |
} |
6864
97187387ad79
Bug 1703 - SDL calls a wrong JNI function on Android by Philipp Wiesemann
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6828
diff
changeset
|
611 |
|
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
612 |
return audioBufferFrames; |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
613 |
} |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
614 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
615 |
void * Android_JNI_GetAudioBuffer() |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 |
{ |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
617 |
return audioBufferPinned; |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
618 |
} |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
620 |
void Android_JNI_WriteAudioBuffer() |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
621 |
{ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
622 |
JNIEnv *mAudioEnv = Android_JNI_GetEnv(); |
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
623 |
|
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
624 |
if (audioBuffer16Bit) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
625 |
(*mAudioEnv)->ReleaseShortArrayElements(mAudioEnv, (jshortArray)audioBuffer, (jshort *)audioBufferPinned, JNI_COMMIT); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
626 |
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mActivityClass, midAudioWriteShortBuffer, (jshortArray)audioBuffer); |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
627 |
} else { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
628 |
(*mAudioEnv)->ReleaseByteArrayElements(mAudioEnv, (jbyteArray)audioBuffer, (jbyte *)audioBufferPinned, JNI_COMMIT); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
629 |
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mActivityClass, midAudioWriteByteBuffer, (jbyteArray)audioBuffer); |
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
630 |
} |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
631 |
|
4996
8d7315668e35
Fixed audio buffer lifecycle and implemented audio shutdown
Sam Lantinga <slouken@libsdl.org>
parents:
4995
diff
changeset
|
632 |
/* JNI_COMMIT means the changes are committed to the VM but the buffer remains pinned */ |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
633 |
} |
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
634 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
635 |
void Android_JNI_CloseAudioDevice() |
4995
9f9bea41e88f
Working audio implementation contributed by Joseph Lunderville
Sam Lantinga <slouken@libsdl.org>
parents:
4989
diff
changeset
|
636 |
{ |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
637 |
JNIEnv *env = Android_JNI_GetEnv(); |
5996
102a9ec1ea13
Don't use a global JNIEnv across threads; it's not thread safe.
Ryan C. Gordon <icculus@icculus.org>
parents:
5994
diff
changeset
|
638 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
639 |
(*env)->CallStaticVoidMethod(env, mActivityClass, midAudioQuit); |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 |
|
4997
a21501393bef
Removed code from GetPrimtiveArrayCritical() experiment
Sam Lantinga <slouken@libsdl.org>
parents:
4996
diff
changeset
|
641 |
if (audioBuffer) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
642 |
(*env)->DeleteGlobalRef(env, audioBuffer); |
4997
a21501393bef
Removed code from GetPrimtiveArrayCritical() experiment
Sam Lantinga <slouken@libsdl.org>
parents:
4996
diff
changeset
|
643 |
audioBuffer = NULL; |
a21501393bef
Removed code from GetPrimtiveArrayCritical() experiment
Sam Lantinga <slouken@libsdl.org>
parents:
4996
diff
changeset
|
644 |
audioBufferPinned = NULL; |
a21501393bef
Removed code from GetPrimtiveArrayCritical() experiment
Sam Lantinga <slouken@libsdl.org>
parents:
4996
diff
changeset
|
645 |
} |
4964
6c645018741e
Build the SDL library as a shared object on Android, so it will work correctly with SDL_image and SDL_ttf.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 |
} |
4981
55b82067815b
Fill in the video mode with the correct screen format
Sam Lantinga <slouken@libsdl.org>
parents:
4980
diff
changeset
|
647 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
648 |
/* Test for an exception and call SDL_SetError with its detail if one occurs */ |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
649 |
/* If the parameter silent is truthy then SDL_SetError() will not be called. */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
650 |
static bool Android_JNI_ExceptionOccurred(bool silent) |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
651 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
652 |
SDL_assert(LocalReferenceHolder_IsActive()); |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
653 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
654 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
655 |
jthrowable exception = (*mEnv)->ExceptionOccurred(mEnv); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
656 |
if (exception != NULL) { |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
657 |
jmethodID mid; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
658 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
659 |
/* Until this happens most JNI operations have undefined behaviour */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
660 |
(*mEnv)->ExceptionClear(mEnv); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
661 |
|
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
662 |
if (!silent) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
663 |
jclass exceptionClass = (*mEnv)->GetObjectClass(mEnv, exception); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
664 |
jclass classClass = (*mEnv)->FindClass(mEnv, "java/lang/Class"); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
665 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
666 |
mid = (*mEnv)->GetMethodID(mEnv, classClass, "getName", "()Ljava/lang/String;"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
667 |
jstring exceptionName = (jstring)(*mEnv)->CallObjectMethod(mEnv, exceptionClass, mid); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
668 |
const char* exceptionNameUTF8 = (*mEnv)->GetStringUTFChars(mEnv, exceptionName, 0); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
669 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
670 |
mid = (*mEnv)->GetMethodID(mEnv, exceptionClass, "getMessage", "()Ljava/lang/String;"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
671 |
jstring exceptionMessage = (jstring)(*mEnv)->CallObjectMethod(mEnv, exception, mid); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
672 |
|
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
673 |
if (exceptionMessage != NULL) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
674 |
const char* exceptionMessageUTF8 = (*mEnv)->GetStringUTFChars(mEnv, exceptionMessage, 0); |
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
675 |
SDL_SetError("%s: %s", exceptionNameUTF8, exceptionMessageUTF8); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
676 |
(*mEnv)->ReleaseStringUTFChars(mEnv, exceptionMessage, exceptionMessageUTF8); |
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
677 |
} else { |
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
678 |
SDL_SetError("%s", exceptionNameUTF8); |
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
679 |
} |
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
680 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
681 |
(*mEnv)->ReleaseStringUTFChars(mEnv, exceptionName, exceptionNameUTF8); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
682 |
} |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
683 |
|
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
684 |
return true; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
685 |
} |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
686 |
|
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
687 |
return false; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
688 |
} |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
689 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
690 |
static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
691 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
692 |
struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
693 |
|
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
694 |
int result = 0; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
695 |
|
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
696 |
jmethodID mid; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
697 |
jobject context; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
698 |
jobject assetManager; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
699 |
jobject inputStream; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
700 |
jclass channels; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
701 |
jobject readableByteChannel; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
702 |
jstring fileNameJString; |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
703 |
jobject fd; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
704 |
jclass fdCls; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
705 |
jfieldID descriptor; |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
706 |
|
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
707 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
708 |
if (!LocalReferenceHolder_Init(&refs, mEnv)) { |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
709 |
goto failure; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
710 |
} |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
711 |
|
6308
263e2c049c22
Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6307
diff
changeset
|
712 |
fileNameJString = (jstring)ctx->hidden.androidio.fileNameRef; |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
713 |
ctx->hidden.androidio.position = 0; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
714 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
715 |
/* context = SDLActivity.getContext(); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
716 |
mid = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
717 |
"getContext","()Landroid/content/Context;"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
718 |
context = (*mEnv)->CallStaticObjectMethod(mEnv, mActivityClass, mid); |
7191
75360622e65f
File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents:
7190
diff
changeset
|
719 |
|
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
720 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
721 |
/* assetManager = context.getAssets(); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
722 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, context), |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
723 |
"getAssets", "()Landroid/content/res/AssetManager;"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
724 |
assetManager = (*mEnv)->CallObjectMethod(mEnv, context, mid); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
725 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
726 |
/* First let's try opening the file to obtain an AssetFileDescriptor. |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
727 |
* This method reads the files directly from the APKs using standard *nix calls |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
728 |
*/ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
729 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, assetManager), "openFd", "(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
730 |
inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString); |
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
731 |
if (Android_JNI_ExceptionOccurred(true)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
732 |
goto fallback; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
733 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
734 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
735 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "getStartOffset", "()J"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
736 |
ctx->hidden.androidio.offset = (*mEnv)->CallLongMethod(mEnv, inputStream, mid); |
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
737 |
if (Android_JNI_ExceptionOccurred(true)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
738 |
goto fallback; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
739 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
740 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
741 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "getDeclaredLength", "()J"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
742 |
ctx->hidden.androidio.size = (*mEnv)->CallLongMethod(mEnv, inputStream, mid); |
7045
4be2c24b7de1
Fixed bug 1780 - SDL_RWFromFile() sets an error on Android although a valid SDL_RWops pointer is returned.
Sam Lantinga <slouken@libsdl.org>
parents:
7039
diff
changeset
|
743 |
if (Android_JNI_ExceptionOccurred(true)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
744 |
goto fallback; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
745 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
746 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
747 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "getFileDescriptor", "()Ljava/io/FileDescriptor;"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
748 |
fd = (*mEnv)->CallObjectMethod(mEnv, inputStream, mid); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
749 |
fdCls = (*mEnv)->GetObjectClass(mEnv, fd); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
750 |
descriptor = (*mEnv)->GetFieldID(mEnv, fdCls, "descriptor", "I"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
751 |
ctx->hidden.androidio.fd = (*mEnv)->GetIntField(mEnv, fd, descriptor); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
752 |
ctx->hidden.androidio.assetFileDescriptorRef = (*mEnv)->NewGlobalRef(mEnv, inputStream); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
753 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
754 |
/* Seek to the correct offset in the file. */ |
6816
b3d3ef1e15b5
Fixes bug 1696, thanks Paul Geerts!
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6806
diff
changeset
|
755 |
lseek(ctx->hidden.androidio.fd, (off_t)ctx->hidden.androidio.offset, SEEK_SET); |
b3d3ef1e15b5
Fixes bug 1696, thanks Paul Geerts!
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6806
diff
changeset
|
756 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
757 |
if (false) { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
758 |
fallback: |
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
759 |
/* Disabled log message because of spam on the Nexus 7 */ |
7678
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
760 |
/* __android_log_print(ANDROID_LOG_DEBUG, "SDL", "Falling back to legacy InputStream method for opening file"); */ |
7190
11612d544fcd
Added mobile application events, with implementations for iOS and Android
Sam Lantinga <slouken@libsdl.org>
parents:
7149
diff
changeset
|
761 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
762 |
/* Try the old method using InputStream */ |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
763 |
ctx->hidden.androidio.assetFileDescriptorRef = NULL; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
764 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
765 |
/* inputStream = assetManager.open(<filename>); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
766 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, assetManager), |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
767 |
"open", "(Ljava/lang/String;I)Ljava/io/InputStream;"); |
7678
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
768 |
inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString, 1 /* ACCESS_RANDOM */); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
769 |
if (Android_JNI_ExceptionOccurred(false)) { |
8896
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
770 |
// Try fallback to APK Extension files |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
771 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, context), |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
772 |
"openAPKExtensionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;"); |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
773 |
inputStream = (*mEnv)->CallObjectMethod(mEnv, context, mid, fileNameJString); |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
774 |
|
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
775 |
if (Android_JNI_ExceptionOccurred(false)) { |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
776 |
goto failure; |
d931167c375a
inital apk extension support
stopiccot <alexey.petruchik@gmail.com>
parents:
8149
diff
changeset
|
777 |
} |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
778 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
779 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
780 |
ctx->hidden.androidio.inputStreamRef = (*mEnv)->NewGlobalRef(mEnv, inputStream); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
781 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
782 |
/* Despite all the visible documentation on [Asset]InputStream claiming |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
783 |
* that the .available() method is not guaranteed to return the entire file |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
784 |
* size, comments in <sdk>/samples/<ver>/ApiDemos/src/com/example/ ... |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
785 |
* android/apis/content/ReadAsset.java imply that Android's |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
786 |
* AssetInputStream.available() /will/ always return the total file size |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
787 |
*/ |
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
788 |
|
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
789 |
/* size = inputStream.available(); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
790 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
791 |
"available", "()I"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
792 |
ctx->hidden.androidio.size = (long)(*mEnv)->CallIntMethod(mEnv, inputStream, mid); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
793 |
if (Android_JNI_ExceptionOccurred(false)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
794 |
goto failure; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
795 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
796 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
797 |
/* readableByteChannel = Channels.newChannel(inputStream); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
798 |
channels = (*mEnv)->FindClass(mEnv, "java/nio/channels/Channels"); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
799 |
mid = (*mEnv)->GetStaticMethodID(mEnv, channels, |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
800 |
"newChannel", |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
801 |
"(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
802 |
readableByteChannel = (*mEnv)->CallStaticObjectMethod( |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
803 |
mEnv, channels, mid, inputStream); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
804 |
if (Android_JNI_ExceptionOccurred(false)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
805 |
goto failure; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
806 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
807 |
|
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
808 |
ctx->hidden.androidio.readableByteChannelRef = |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
809 |
(*mEnv)->NewGlobalRef(mEnv, readableByteChannel); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
810 |
|
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
811 |
/* Store .read id for reading purposes */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
812 |
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, readableByteChannel), |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
813 |
"read", "(Ljava/nio/ByteBuffer;)I"); |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
814 |
ctx->hidden.androidio.readMethod = mid; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
815 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
816 |
|
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
817 |
if (false) { |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
818 |
failure: |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
819 |
result = -1; |
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
820 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
821 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.fileNameRef); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
822 |
|
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
823 |
if(ctx->hidden.androidio.inputStreamRef != NULL) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
824 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.inputStreamRef); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
825 |
} |
6308
263e2c049c22
Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6307
diff
changeset
|
826 |
|
263e2c049c22
Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6307
diff
changeset
|
827 |
if(ctx->hidden.androidio.readableByteChannelRef != NULL) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
828 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.readableByteChannelRef); |
6308
263e2c049c22
Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6307
diff
changeset
|
829 |
} |
263e2c049c22
Fixes issue #1500 "SDL_RWops fails under Android 4" by removing stale Local Refs
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6307
diff
changeset
|
830 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
831 |
if(ctx->hidden.androidio.assetFileDescriptorRef != NULL) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
832 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.assetFileDescriptorRef); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
833 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
834 |
|
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
835 |
} |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
836 |
|
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
837 |
LocalReferenceHolder_Cleanup(&refs); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
838 |
return result; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
839 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
840 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
841 |
int Android_JNI_FileOpen(SDL_RWops* ctx, |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
842 |
const char* fileName, const char* mode) |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
843 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
844 |
struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
845 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
846 |
int retval; |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
847 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
848 |
if (!LocalReferenceHolder_Init(&refs, mEnv)) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
849 |
LocalReferenceHolder_Cleanup(&refs); |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
850 |
return -1; |
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
851 |
} |
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
852 |
|
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
853 |
if (!ctx) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
854 |
LocalReferenceHolder_Cleanup(&refs); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
855 |
return -1; |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
856 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
857 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
858 |
jstring fileNameJString = (*mEnv)->NewStringUTF(mEnv, fileName); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
859 |
ctx->hidden.androidio.fileNameRef = (*mEnv)->NewGlobalRef(mEnv, fileNameJString); |
5650
640c67302f8e
* Fix many memory leaks in Android FS code
Tim Angus <tim@blackcompanystudios.co.uk>
parents:
5582
diff
changeset
|
860 |
ctx->hidden.androidio.inputStreamRef = NULL; |
6335
fbb84f5b985f
Fixes #1519, adds initialization to Android RWops internal variables.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6330
diff
changeset
|
861 |
ctx->hidden.androidio.readableByteChannelRef = NULL; |
fbb84f5b985f
Fixes #1519, adds initialization to Android RWops internal variables.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6330
diff
changeset
|
862 |
ctx->hidden.androidio.readMethod = NULL; |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
863 |
ctx->hidden.androidio.assetFileDescriptorRef = NULL; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
864 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
865 |
retval = Internal_Android_JNI_FileOpen(ctx); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
866 |
LocalReferenceHolder_Cleanup(&refs); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
867 |
return retval; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
868 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
869 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
870 |
size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
871 |
size_t size, size_t maxnum) |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
872 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
873 |
struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); |
6377
3d868ca4782f
Fixes Android_JNI_FileRead behaviour where reading past the end of a file returns zero instead of the number of bytes read.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6354
diff
changeset
|
874 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
875 |
if (ctx->hidden.androidio.assetFileDescriptorRef) { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
876 |
size_t bytesMax = size * maxnum; |
7678
286c42d7c5ed
OCD fixes: Adds a space after /* (glory to regular expressions!)
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7677
diff
changeset
|
877 |
if (ctx->hidden.androidio.size != -1 /* UNKNOWN_LENGTH */ && ctx->hidden.androidio.position + bytesMax > ctx->hidden.androidio.size) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
878 |
bytesMax = ctx->hidden.androidio.size - ctx->hidden.androidio.position; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
879 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
880 |
size_t result = read(ctx->hidden.androidio.fd, buffer, bytesMax ); |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
881 |
if (result > 0) { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
882 |
ctx->hidden.androidio.position += result; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
883 |
LocalReferenceHolder_Cleanup(&refs); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
884 |
return result / size; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
885 |
} |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
886 |
LocalReferenceHolder_Cleanup(&refs); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
887 |
return 0; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
888 |
} else { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
889 |
jlong bytesRemaining = (jlong) (size * maxnum); |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
890 |
jlong bytesMax = (jlong) (ctx->hidden.androidio.size - ctx->hidden.androidio.position); |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
891 |
int bytesRead = 0; |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
892 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
893 |
/* Don't read more bytes than those that remain in the file, otherwise we get an exception */ |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
894 |
if (bytesRemaining > bytesMax) bytesRemaining = bytesMax; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
895 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
896 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
897 |
if (!LocalReferenceHolder_Init(&refs, mEnv)) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
898 |
LocalReferenceHolder_Cleanup(&refs); |
7368
0e12e09df086
Fixed SDL_RWread() returning -1 as unsigned instead of 0 if error on Android.
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents:
7246
diff
changeset
|
899 |
return 0; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
900 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
901 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
902 |
jobject readableByteChannel = (jobject)ctx->hidden.androidio.readableByteChannelRef; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
903 |
jmethodID readMethod = (jmethodID)ctx->hidden.androidio.readMethod; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
904 |
jobject byteBuffer = (*mEnv)->NewDirectByteBuffer(mEnv, buffer, bytesRemaining); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
905 |
|
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
906 |
while (bytesRemaining > 0) { |
7663
53fe1b64eb2d
More non C89 compliant comments
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7659
diff
changeset
|
907 |
/* result = readableByteChannel.read(...); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
908 |
int result = (*mEnv)->CallIntMethod(mEnv, readableByteChannel, readMethod, byteBuffer); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
909 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
910 |
if (Android_JNI_ExceptionOccurred(false)) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
911 |
LocalReferenceHolder_Cleanup(&refs); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
912 |
return 0; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
913 |
} |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
914 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
915 |
if (result < 0) { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
916 |
break; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
917 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
918 |
|
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
919 |
bytesRemaining -= result; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
920 |
bytesRead += result; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
921 |
ctx->hidden.androidio.position += result; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
922 |
} |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
923 |
LocalReferenceHolder_Cleanup(&refs); |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
924 |
return bytesRead / size; |
7191
75360622e65f
File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents:
7190
diff
changeset
|
925 |
} |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
926 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
927 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
928 |
size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
929 |
size_t size, size_t num) |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
930 |
{ |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
931 |
SDL_SetError("Cannot write to Android package filesystem"); |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
932 |
return 0; |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
933 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
934 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
935 |
static int Internal_Android_JNI_FileClose(SDL_RWops* ctx, bool release) |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
936 |
{ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
937 |
struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
938 |
|
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
939 |
int result = 0; |
6354
17840f487124
Fixes #1422, removes global JNI Env, uses per thread copies, adds thread auto detaching.
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6335
diff
changeset
|
940 |
JNIEnv *mEnv = Android_JNI_GetEnv(); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
941 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
942 |
if (!LocalReferenceHolder_Init(&refs, mEnv)) { |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
943 |
LocalReferenceHolder_Cleanup(&refs); |
7037
3fedf1f25b94
Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents:
7018
diff
changeset
|
944 |
return SDL_SetError("Failed to allocate enough JVM local references"); |
6284
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
945 |
} |
1893d507ba42
Fixed bug 1417 - Android_JNI_FileClose local reference bug
Sam Lantinga <slouken@libsdl.org>
parents:
6212
diff
changeset
|
946 |
|
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
947 |
if (ctx) { |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
948 |
if (release) { |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
949 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.fileNameRef); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
950 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
951 |
|
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
952 |
if (ctx->hidden.androidio.assetFileDescriptorRef) { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
953 |
jobject inputStream = (jobject)ctx->hidden.androidio.assetFileDescriptorRef; |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
954 |
jmethodID mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
955 |
"close", "()V"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
956 |
(*mEnv)->CallVoidMethod(mEnv, inputStream, mid); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
957 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.assetFileDescriptorRef); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
958 |
if (Android_JNI_ExceptionOccurred(false)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
959 |
result = -1; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
960 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
961 |
} |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
962 |
else { |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
963 |
jobject inputStream = (jobject)ctx->hidden.androidio.inputStreamRef; |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
964 |
|
7677
871d43c6968a
OCD fixes: Adds a space before */
Gabriel Jacobo <gabomdq@gmail.com>
parents:
7663
diff
changeset
|
965 |
/* inputStream.close(); */ |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
966 |
jmethodID mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
967 |
"close", "()V"); |
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
968 |
(*mEnv)->CallVoidMethod(mEnv, inputStream, mid); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
969 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.inputStreamRef); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
970 |
(*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.readableByteChannelRef); |
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
971 |
if (Android_JNI_ExceptionOccurred(false)) { |
6806
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
972 |
result = -1; |
9e57ff36fd7a
Android: Access APK files using AssetFileDescriptor
Gabriel Jacobo <gabomdq@gmail.com>
parents:
6802
diff
changeset
|
973 |
} |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
974 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
975 |
|
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
976 |
if (release) { |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
977 |
SDL_FreeRW(ctx); |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
978 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
979 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
980 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
981 |
LocalReferenceHolder_Cleanup(&refs); |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
982 |
return result; |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
983 |
} |
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
984 |
|
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
985 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
986 |
Sint64 Android_JNI_FileSize(SDL_RWops* ctx) |
5582
1281a3f1f0a6
Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents:
5535
diff
changeset
|
987 |
{ |
6642
b716011e53ce
Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents:
6630
diff
changeset
|
988 |
return ctx->hidden.androidio.size; |
b716011e53ce
Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents:
6630
diff
changeset
|
989 |
} |
b716011e53ce
Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents:
6630
diff
changeset
|
990 |
|
7501
b27825bb5879
Android: Removed all unnecessary dependencies on C++.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
7368
diff
changeset
|
991 |
Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence) |
6642
b716011e53ce
Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsd |