mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-05-31 05:56:24 +08:00
Separated out SDL Android java code so audio, controller, and filesystem APIs can be used independently of the SDL activity, in Qt apps for example.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
+165
-102
@@ -56,6 +56,8 @@
|
|||||||
#define CONCAT1(prefix, class, function) CONCAT2(prefix, class, function)
|
#define CONCAT1(prefix, class, function) CONCAT2(prefix, class, function)
|
||||||
#define CONCAT2(prefix, class, function) Java_ ## prefix ## _ ## class ## _ ## function
|
#define CONCAT2(prefix, class, function) Java_ ## prefix ## _ ## class ## _ ## function
|
||||||
#define SDL_JAVA_INTERFACE(function) CONCAT1(SDL_JAVA_PREFIX, SDLActivity, function)
|
#define SDL_JAVA_INTERFACE(function) CONCAT1(SDL_JAVA_PREFIX, SDLActivity, function)
|
||||||
|
#define SDL_JAVA_AUDIO_INTERFACE(function) CONCAT1(SDL_JAVA_PREFIX, SDLAudioManager, function)
|
||||||
|
#define SDL_JAVA_CONTROLLER_INTERFACE(function) CONCAT1(SDL_JAVA_PREFIX, SDLControllerManager, function)
|
||||||
#define SDL_JAVA_INTERFACE_INPUT_CONNECTION(function) CONCAT1(SDL_JAVA_PREFIX, SDLInputConnection, function)
|
#define SDL_JAVA_INTERFACE_INPUT_CONNECTION(function) CONCAT1(SDL_JAVA_PREFIX, SDLInputConnection, function)
|
||||||
|
|
||||||
|
|
||||||
@@ -75,39 +77,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeResize)(
|
|||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint width, jint height, jint format, jfloat rate);
|
jint width, jint height, jint format, jfloat rate);
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadDown)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jint keycode);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadUp)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jint keycode);
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeJoy)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jint axis, jfloat value);
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeHat)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jint hat_id, jint x, jint y);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddJoystick)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jstring device_name, jstring device_desc, jint is_accelerometer,
|
|
||||||
jint nbuttons, jint naxes, jint nhats, jint nballs);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeRemoveJoystick)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddHaptic)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id, jstring device_name);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeRemoveHaptic)(
|
|
||||||
JNIEnv* env, jclass jcls,
|
|
||||||
jint device_id);
|
|
||||||
|
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceChanged)(
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceChanged)(
|
||||||
JNIEnv* env, jclass jcls);
|
JNIEnv* env, jclass jcls);
|
||||||
|
|
||||||
@@ -166,6 +135,48 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeSetComposingTex
|
|||||||
JNIEnv* env, jclass cls,
|
JNIEnv* env, jclass cls,
|
||||||
jstring text, jint newCursorPosition);
|
jstring text, jint newCursorPosition);
|
||||||
|
|
||||||
|
/* Java class SDLAudioManager */
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_AUDIO_INTERFACE(nativeSetupJNI)(
|
||||||
|
JNIEnv *env, jclass jcls);
|
||||||
|
|
||||||
|
/* Java class SDLControllerManager */
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(
|
||||||
|
JNIEnv *env, jclass jcls);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jint keycode);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadUp)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jint keycode);
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativeJoy)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jint axis, jfloat value);
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativeHat)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jint hat_id, jint x, jint y);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddJoystick)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jstring device_name, jstring device_desc, jint is_accelerometer,
|
||||||
|
jint nbuttons, jint naxes, jint nhats, jint nballs);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveJoystick)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddHaptic)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id, jstring device_name);
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveHaptic)(
|
||||||
|
JNIEnv* env, jclass jcls,
|
||||||
|
jint device_id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Uncomment this to log messages entering and exiting methods in this file */
|
/* Uncomment this to log messages entering and exiting methods in this file */
|
||||||
/* #define DEBUG_JNI */
|
/* #define DEBUG_JNI */
|
||||||
@@ -189,17 +200,6 @@ static jclass mActivityClass;
|
|||||||
|
|
||||||
/* method signatures */
|
/* method signatures */
|
||||||
static jmethodID midGetNativeSurface;
|
static jmethodID midGetNativeSurface;
|
||||||
static jmethodID midAudioOpen;
|
|
||||||
static jmethodID midAudioWriteShortBuffer;
|
|
||||||
static jmethodID midAudioWriteByteBuffer;
|
|
||||||
static jmethodID midAudioClose;
|
|
||||||
static jmethodID midCaptureOpen;
|
|
||||||
static jmethodID midCaptureReadShortBuffer;
|
|
||||||
static jmethodID midCaptureReadByteBuffer;
|
|
||||||
static jmethodID midCaptureClose;
|
|
||||||
static jmethodID midPollInputDevices;
|
|
||||||
static jmethodID midPollHapticDevices;
|
|
||||||
static jmethodID midHapticRun;
|
|
||||||
static jmethodID midSetActivityTitle;
|
static jmethodID midSetActivityTitle;
|
||||||
static jmethodID midSetOrientation;
|
static jmethodID midSetOrientation;
|
||||||
static jmethodID midGetContext;
|
static jmethodID midGetContext;
|
||||||
@@ -210,7 +210,28 @@ static jmethodID midIsScreenKeyboardShown;
|
|||||||
static jmethodID midClipboardSetText;
|
static jmethodID midClipboardSetText;
|
||||||
static jmethodID midClipboardGetText;
|
static jmethodID midClipboardGetText;
|
||||||
static jmethodID midClipboardHasText;
|
static jmethodID midClipboardHasText;
|
||||||
|
static jmethodID midOpenAPKExpansionInputStream;
|
||||||
|
|
||||||
|
/* audio manager */
|
||||||
|
static jclass mAudioManagerClass;
|
||||||
|
|
||||||
|
/* method signatures */
|
||||||
|
static jmethodID midAudioOpen;
|
||||||
|
static jmethodID midAudioWriteShortBuffer;
|
||||||
|
static jmethodID midAudioWriteByteBuffer;
|
||||||
|
static jmethodID midAudioClose;
|
||||||
|
static jmethodID midCaptureOpen;
|
||||||
|
static jmethodID midCaptureReadShortBuffer;
|
||||||
|
static jmethodID midCaptureReadByteBuffer;
|
||||||
|
static jmethodID midCaptureClose;
|
||||||
|
|
||||||
|
/* controller manager */
|
||||||
|
static jclass mControllerManagerClass;
|
||||||
|
|
||||||
|
/* method signatures */
|
||||||
|
static jmethodID midPollInputDevices;
|
||||||
|
static jmethodID midPollHapticDevices;
|
||||||
|
static jmethodID midHapticRun;
|
||||||
|
|
||||||
/* static fields */
|
/* static fields */
|
||||||
static jfieldID fidSeparateMouseAndTouch;
|
static jfieldID fidSeparateMouseAndTouch;
|
||||||
@@ -245,7 +266,17 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
|
|||||||
return JNI_VERSION_1_4;
|
return JNI_VERSION_1_4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called before SDL_main() to initialize JNI bindings */
|
void checkJNIReady()
|
||||||
|
{
|
||||||
|
if (!mActivityClass || !mAudioManagerClass || !mControllerManagerClass) {
|
||||||
|
// We aren't fully initialized, let's just return.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SetMainReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Activity initialization -- called before SDL_main() to initialize JNI bindings */
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass cls)
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass cls)
|
||||||
{
|
{
|
||||||
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeSetupJNI()");
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeSetupJNI()");
|
||||||
@@ -256,28 +287,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
|||||||
|
|
||||||
midGetNativeSurface = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
midGetNativeSurface = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||||
"getNativeSurface","()Landroid/view/Surface;");
|
"getNativeSurface","()Landroid/view/Surface;");
|
||||||
midAudioOpen = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"audioOpen", "(IZZI)I");
|
|
||||||
midAudioWriteShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"audioWriteShortBuffer", "([S)V");
|
|
||||||
midAudioWriteByteBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"audioWriteByteBuffer", "([B)V");
|
|
||||||
midAudioClose = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"audioClose", "()V");
|
|
||||||
midCaptureOpen = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"captureOpen", "(IZZI)I");
|
|
||||||
midCaptureReadShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"captureReadShortBuffer", "([SZ)I");
|
|
||||||
midCaptureReadByteBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"captureReadByteBuffer", "([BZ)I");
|
|
||||||
midCaptureClose = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"captureClose", "()V");
|
|
||||||
midPollInputDevices = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"pollInputDevices", "()V");
|
|
||||||
midPollHapticDevices = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"pollHapticDevices", "()V");
|
|
||||||
midHapticRun = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
|
||||||
"hapticRun", "(II)V");
|
|
||||||
midSetActivityTitle = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
midSetActivityTitle = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||||
"setActivityTitle","(Ljava/lang/String;)Z");
|
"setActivityTitle","(Ljava/lang/String;)Z");
|
||||||
midSetOrientation = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
midSetOrientation = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||||
@@ -298,16 +307,14 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
|||||||
"clipboardGetText", "()Ljava/lang/String;");
|
"clipboardGetText", "()Ljava/lang/String;");
|
||||||
midClipboardHasText = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
midClipboardHasText = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||||
"clipboardHasText", "()Z");
|
"clipboardHasText", "()Z");
|
||||||
|
midOpenAPKExpansionInputStream = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||||
bHasNewData = SDL_FALSE;
|
"openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;");
|
||||||
|
|
||||||
if (!midGetNativeSurface ||
|
if (!midGetNativeSurface ||
|
||||||
!midAudioOpen || !midAudioWriteShortBuffer || !midAudioWriteByteBuffer || !midAudioClose ||
|
|
||||||
!midCaptureOpen || !midCaptureReadShortBuffer || !midCaptureReadByteBuffer || !midCaptureClose ||
|
|
||||||
!midPollInputDevices || !midPollHapticDevices || !midHapticRun ||
|
|
||||||
!midSetActivityTitle || !midSetOrientation || !midGetContext || !midInputGetInputDeviceIds ||
|
!midSetActivityTitle || !midSetOrientation || !midGetContext || !midInputGetInputDeviceIds ||
|
||||||
!midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown ||
|
!midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown ||
|
||||||
!midClipboardSetText || !midClipboardGetText || !midClipboardHasText) {
|
!midClipboardSetText || !midClipboardGetText || !midClipboardHasText ||
|
||||||
|
!midOpenAPKExpansionInputStream) {
|
||||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLActivity.java?");
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLActivity.java?");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,7 +324,64 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
|||||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java static fields, do you have the latest version of SDLActivity.java?");
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java static fields, do you have the latest version of SDLActivity.java?");
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SetMainReady();
|
checkJNIReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Audio initialization -- called before SDL_main() to initialize JNI bindings */
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_AUDIO_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass cls)
|
||||||
|
{
|
||||||
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "AUDIO nativeSetupJNI()");
|
||||||
|
|
||||||
|
Android_JNI_SetupThread();
|
||||||
|
|
||||||
|
mAudioManagerClass = (jclass)((*mEnv)->NewGlobalRef(mEnv, cls));
|
||||||
|
|
||||||
|
midAudioOpen = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"audioOpen", "(IZZI)I");
|
||||||
|
midAudioWriteShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"audioWriteShortBuffer", "([S)V");
|
||||||
|
midAudioWriteByteBuffer = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"audioWriteByteBuffer", "([B)V");
|
||||||
|
midAudioClose = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"audioClose", "()V");
|
||||||
|
midCaptureOpen = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"captureOpen", "(IZZI)I");
|
||||||
|
midCaptureReadShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"captureReadShortBuffer", "([SZ)I");
|
||||||
|
midCaptureReadByteBuffer = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"captureReadByteBuffer", "([BZ)I");
|
||||||
|
midCaptureClose = (*mEnv)->GetStaticMethodID(mEnv, mAudioManagerClass,
|
||||||
|
"captureClose", "()V");
|
||||||
|
|
||||||
|
if (!midAudioOpen || !midAudioWriteShortBuffer || !midAudioWriteByteBuffer || !midAudioClose ||
|
||||||
|
!midCaptureOpen || !midCaptureReadShortBuffer || !midCaptureReadByteBuffer || !midCaptureClose) {
|
||||||
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLAudioManager.java?");
|
||||||
|
}
|
||||||
|
|
||||||
|
checkJNIReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Controller initialization -- called before SDL_main() to initialize JNI bindings */
|
||||||
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass cls)
|
||||||
|
{
|
||||||
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "CONTROLLER nativeSetupJNI()");
|
||||||
|
|
||||||
|
Android_JNI_SetupThread();
|
||||||
|
|
||||||
|
mControllerManagerClass = (jclass)((*mEnv)->NewGlobalRef(mEnv, cls));
|
||||||
|
|
||||||
|
midPollInputDevices = (*mEnv)->GetStaticMethodID(mEnv, mControllerManagerClass,
|
||||||
|
"pollInputDevices", "()V");
|
||||||
|
midPollHapticDevices = (*mEnv)->GetStaticMethodID(mEnv, mControllerManagerClass,
|
||||||
|
"pollHapticDevices", "()V");
|
||||||
|
midHapticRun = (*mEnv)->GetStaticMethodID(mEnv, mControllerManagerClass,
|
||||||
|
"hapticRun", "(II)V");
|
||||||
|
|
||||||
|
if (!midPollInputDevices || !midPollHapticDevices || !midHapticRun) {
|
||||||
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLControllerManager.java?");
|
||||||
|
}
|
||||||
|
|
||||||
|
checkJNIReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SDL main function prototype */
|
/* SDL main function prototype */
|
||||||
@@ -421,7 +485,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeResize)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Paddown */
|
/* Paddown */
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadDown)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id, jint keycode)
|
jint device_id, jint keycode)
|
||||||
{
|
{
|
||||||
@@ -429,7 +493,7 @@ JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadDown)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Padup */
|
/* Padup */
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadUp)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadUp)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id, jint keycode)
|
jint device_id, jint keycode)
|
||||||
{
|
{
|
||||||
@@ -437,7 +501,7 @@ JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(onNativePadUp)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Joy */
|
/* Joy */
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeJoy)(
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativeJoy)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id, jint axis, jfloat value)
|
jint device_id, jint axis, jfloat value)
|
||||||
{
|
{
|
||||||
@@ -445,7 +509,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeJoy)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* POV Hat */
|
/* POV Hat */
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeHat)(
|
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativeHat)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id, jint hat_id, jint x, jint y)
|
jint device_id, jint hat_id, jint x, jint y)
|
||||||
{
|
{
|
||||||
@@ -453,7 +517,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeHat)(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddJoystick)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddJoystick)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id, jstring device_name, jstring device_desc, jint is_accelerometer,
|
jint device_id, jstring device_name, jstring device_desc, jint is_accelerometer,
|
||||||
jint nbuttons, jint naxes, jint nhats, jint nballs)
|
jint nbuttons, jint naxes, jint nhats, jint nballs)
|
||||||
@@ -470,14 +534,14 @@ JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddJoystick)(
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeRemoveJoystick)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveJoystick)(
|
||||||
JNIEnv* env, jclass jcls,
|
JNIEnv* env, jclass jcls,
|
||||||
jint device_id)
|
jint device_id)
|
||||||
{
|
{
|
||||||
return Android_RemoveJoystick(device_id);
|
return Android_RemoveJoystick(device_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddHaptic)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeAddHaptic)(
|
||||||
JNIEnv* env, jclass jcls, jint device_id, jstring device_name)
|
JNIEnv* env, jclass jcls, jint device_id, jstring device_name)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
@@ -490,7 +554,7 @@ JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeAddHaptic)(
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL SDL_JAVA_INTERFACE(nativeRemoveHaptic)(
|
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveHaptic)(
|
||||||
JNIEnv* env, jclass jcls, jint device_id)
|
JNIEnv* env, jclass jcls, jint device_id)
|
||||||
{
|
{
|
||||||
return Android_RemoveHaptic(device_id);
|
return Android_RemoveHaptic(device_id);
|
||||||
@@ -882,7 +946,7 @@ int Android_JNI_OpenAudioDevice(int iscapture, int sampleRate, int is16Bit, int
|
|||||||
if (iscapture) {
|
if (iscapture) {
|
||||||
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device for capture");
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device for capture");
|
||||||
captureBuffer16Bit = is16Bit;
|
captureBuffer16Bit = is16Bit;
|
||||||
if ((*env)->CallStaticIntMethod(env, mActivityClass, midCaptureOpen, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames) != 0) {
|
if ((*env)->CallStaticIntMethod(env, mAudioManagerClass, midCaptureOpen, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames) != 0) {
|
||||||
/* Error during audio initialization */
|
/* Error during audio initialization */
|
||||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: error on AudioRecord initialization!");
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: error on AudioRecord initialization!");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -890,7 +954,7 @@ int Android_JNI_OpenAudioDevice(int iscapture, int sampleRate, int is16Bit, int
|
|||||||
} else {
|
} else {
|
||||||
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device for output");
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device for output");
|
||||||
audioBuffer16Bit = is16Bit;
|
audioBuffer16Bit = is16Bit;
|
||||||
if ((*env)->CallStaticIntMethod(env, mActivityClass, midAudioOpen, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames) != 0) {
|
if ((*env)->CallStaticIntMethod(env, mAudioManagerClass, midAudioOpen, sampleRate, audioBuffer16Bit, audioBufferStereo, desiredBufferFrames) != 0) {
|
||||||
/* Error during audio initialization */
|
/* Error during audio initialization */
|
||||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: error on AudioTrack initialization!");
|
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL audio: error on AudioTrack initialization!");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -958,10 +1022,10 @@ void Android_JNI_WriteAudioBuffer(void)
|
|||||||
|
|
||||||
if (audioBuffer16Bit) {
|
if (audioBuffer16Bit) {
|
||||||
(*mAudioEnv)->ReleaseShortArrayElements(mAudioEnv, (jshortArray)audioBuffer, (jshort *)audioBufferPinned, JNI_COMMIT);
|
(*mAudioEnv)->ReleaseShortArrayElements(mAudioEnv, (jshortArray)audioBuffer, (jshort *)audioBufferPinned, JNI_COMMIT);
|
||||||
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mActivityClass, midAudioWriteShortBuffer, (jshortArray)audioBuffer);
|
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mAudioManagerClass, midAudioWriteShortBuffer, (jshortArray)audioBuffer);
|
||||||
} else {
|
} else {
|
||||||
(*mAudioEnv)->ReleaseByteArrayElements(mAudioEnv, (jbyteArray)audioBuffer, (jbyte *)audioBufferPinned, JNI_COMMIT);
|
(*mAudioEnv)->ReleaseByteArrayElements(mAudioEnv, (jbyteArray)audioBuffer, (jbyte *)audioBufferPinned, JNI_COMMIT);
|
||||||
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mActivityClass, midAudioWriteByteBuffer, (jbyteArray)audioBuffer);
|
(*mAudioEnv)->CallStaticVoidMethod(mAudioEnv, mAudioManagerClass, midAudioWriteByteBuffer, (jbyteArray)audioBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* JNI_COMMIT means the changes are committed to the VM but the buffer remains pinned */
|
/* JNI_COMMIT means the changes are committed to the VM but the buffer remains pinned */
|
||||||
@@ -975,7 +1039,7 @@ int Android_JNI_CaptureAudioBuffer(void *buffer, int buflen)
|
|||||||
|
|
||||||
if (captureBuffer16Bit) {
|
if (captureBuffer16Bit) {
|
||||||
SDL_assert((*env)->GetArrayLength(env, (jshortArray)captureBuffer) == (buflen / 2));
|
SDL_assert((*env)->GetArrayLength(env, (jshortArray)captureBuffer) == (buflen / 2));
|
||||||
br = (*env)->CallStaticIntMethod(env, mActivityClass, midCaptureReadShortBuffer, (jshortArray)captureBuffer, JNI_TRUE);
|
br = (*env)->CallStaticIntMethod(env, mAudioManagerClass, midCaptureReadShortBuffer, (jshortArray)captureBuffer, JNI_TRUE);
|
||||||
if (br > 0) {
|
if (br > 0) {
|
||||||
jshort *ptr = (*env)->GetShortArrayElements(env, (jshortArray)captureBuffer, &isCopy);
|
jshort *ptr = (*env)->GetShortArrayElements(env, (jshortArray)captureBuffer, &isCopy);
|
||||||
br *= 2;
|
br *= 2;
|
||||||
@@ -984,7 +1048,7 @@ int Android_JNI_CaptureAudioBuffer(void *buffer, int buflen)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SDL_assert((*env)->GetArrayLength(env, (jshortArray)captureBuffer) == buflen);
|
SDL_assert((*env)->GetArrayLength(env, (jshortArray)captureBuffer) == buflen);
|
||||||
br = (*env)->CallStaticIntMethod(env, mActivityClass, midCaptureReadByteBuffer, (jbyteArray)captureBuffer, JNI_TRUE);
|
br = (*env)->CallStaticIntMethod(env, mAudioManagerClass, midCaptureReadByteBuffer, (jbyteArray)captureBuffer, JNI_TRUE);
|
||||||
if (br > 0) {
|
if (br > 0) {
|
||||||
jbyte *ptr = (*env)->GetByteArrayElements(env, (jbyteArray)captureBuffer, &isCopy);
|
jbyte *ptr = (*env)->GetByteArrayElements(env, (jbyteArray)captureBuffer, &isCopy);
|
||||||
SDL_memcpy(buffer, ptr, br);
|
SDL_memcpy(buffer, ptr, br);
|
||||||
@@ -1008,9 +1072,9 @@ void Android_JNI_FlushCapturedAudio(void)
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (captureBuffer16Bit) {
|
if (captureBuffer16Bit) {
|
||||||
(*env)->CallStaticIntMethod(env, mActivityClass, midCaptureReadShortBuffer, (jshortArray)captureBuffer, JNI_FALSE);
|
(*env)->CallStaticIntMethod(env, mAudioManagerClass, midCaptureReadShortBuffer, (jshortArray)captureBuffer, JNI_FALSE);
|
||||||
} else {
|
} else {
|
||||||
(*env)->CallStaticIntMethod(env, mActivityClass, midCaptureReadByteBuffer, (jbyteArray)captureBuffer, JNI_FALSE);
|
(*env)->CallStaticIntMethod(env, mAudioManagerClass, midCaptureReadByteBuffer, (jbyteArray)captureBuffer, JNI_FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1020,13 +1084,13 @@ void Android_JNI_CloseAudioDevice(const int iscapture)
|
|||||||
JNIEnv *env = Android_JNI_GetEnv();
|
JNIEnv *env = Android_JNI_GetEnv();
|
||||||
|
|
||||||
if (iscapture) {
|
if (iscapture) {
|
||||||
(*env)->CallStaticVoidMethod(env, mActivityClass, midCaptureClose);
|
(*env)->CallStaticVoidMethod(env, mAudioManagerClass, midCaptureClose);
|
||||||
if (captureBuffer) {
|
if (captureBuffer) {
|
||||||
(*env)->DeleteGlobalRef(env, captureBuffer);
|
(*env)->DeleteGlobalRef(env, captureBuffer);
|
||||||
captureBuffer = NULL;
|
captureBuffer = NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(*env)->CallStaticVoidMethod(env, mActivityClass, midAudioClose);
|
(*env)->CallStaticVoidMethod(env, mAudioManagerClass, midAudioClose);
|
||||||
if (audioBuffer) {
|
if (audioBuffer) {
|
||||||
(*env)->DeleteGlobalRef(env, audioBuffer);
|
(*env)->DeleteGlobalRef(env, audioBuffer);
|
||||||
audioBuffer = NULL;
|
audioBuffer = NULL;
|
||||||
@@ -1160,13 +1224,7 @@ fallback:
|
|||||||
inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString, 1 /* ACCESS_RANDOM */);
|
inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString, 1 /* ACCESS_RANDOM */);
|
||||||
if (Android_JNI_ExceptionOccurred(SDL_FALSE)) {
|
if (Android_JNI_ExceptionOccurred(SDL_FALSE)) {
|
||||||
/* Try fallback to APK expansion files */
|
/* Try fallback to APK expansion files */
|
||||||
mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, context),
|
inputStream = (*mEnv)->CallStaticObjectMethod(mEnv, mActivityClass, midOpenAPKExpansionInputStream, fileNameJString);
|
||||||
"openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;");
|
|
||||||
if (!mid) {
|
|
||||||
SDL_SetError("No openAPKExpansionInputStream() in Java class");
|
|
||||||
goto failure; /* Java class is missing the required method */
|
|
||||||
}
|
|
||||||
inputStream = (*mEnv)->CallObjectMethod(mEnv, context, mid, fileNameJString);
|
|
||||||
|
|
||||||
/* Exception is checked first because it always needs to be cleared.
|
/* Exception is checked first because it always needs to be cleared.
|
||||||
* If no exception occurred then the last SDL error message is kept.
|
* If no exception occurred then the last SDL error message is kept.
|
||||||
@@ -1673,19 +1731,19 @@ void Android_JNI_SetSeparateMouseAndTouch(SDL_bool new_value)
|
|||||||
void Android_JNI_PollInputDevices(void)
|
void Android_JNI_PollInputDevices(void)
|
||||||
{
|
{
|
||||||
JNIEnv *env = Android_JNI_GetEnv();
|
JNIEnv *env = Android_JNI_GetEnv();
|
||||||
(*env)->CallStaticVoidMethod(env, mActivityClass, midPollInputDevices);
|
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midPollInputDevices);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Android_JNI_PollHapticDevices(void)
|
void Android_JNI_PollHapticDevices(void)
|
||||||
{
|
{
|
||||||
JNIEnv *env = Android_JNI_GetEnv();
|
JNIEnv *env = Android_JNI_GetEnv();
|
||||||
(*env)->CallStaticVoidMethod(env, mActivityClass, midPollHapticDevices);
|
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midPollHapticDevices);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Android_JNI_HapticRun(int device_id, int length)
|
void Android_JNI_HapticRun(int device_id, int length)
|
||||||
{
|
{
|
||||||
JNIEnv *env = Android_JNI_GetEnv();
|
JNIEnv *env = Android_JNI_GetEnv();
|
||||||
(*env)->CallStaticVoidMethod(env, mActivityClass, midHapticRun, device_id, length);
|
(*env)->CallStaticVoidMethod(env, mControllerManagerClass, midHapticRun, device_id, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1862,6 +1920,11 @@ const char * SDL_AndroidGetInternalStoragePath(void)
|
|||||||
|
|
||||||
/* context = SDLActivity.getContext(); */
|
/* context = SDLActivity.getContext(); */
|
||||||
context = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetContext);
|
context = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetContext);
|
||||||
|
if (!context) {
|
||||||
|
SDL_SetError("Couldn't get Android context!");
|
||||||
|
LocalReferenceHolder_Cleanup(&refs);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* fileObj = context.getFilesDir(); */
|
/* fileObj = context.getFilesDir(); */
|
||||||
mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, context),
|
mid = (*env)->GetMethodID(env, (*env)->GetObjectClass(env, context),
|
||||||
|
|||||||
Reference in New Issue
Block a user