Fixed bug 3128 - Removing all the static variables from android SDLActivity and accompanying JNI calls.

owen

I removed all the static variables from SDLActivity.java

Updated all the SDL_android.c jni calls as well

I added a new function to SDL_android.c/ h
void Android_JNI_SeparateEventsHint(const char* c);

This is called by SDL_androidtouch.c so that this TU doesn't need to call any JNI functions.
This commit is contained in:
Sam Lantinga 2017-08-12 12:24:59 -07:00
parent 0a52db54bd
commit c086251266
3 changed files with 20 additions and 11 deletions

View File

@ -181,6 +181,9 @@ static jmethodID midPollInputDevices;
static jmethodID midPollHapticDevices; static jmethodID midPollHapticDevices;
static jmethodID midHapticRun; static jmethodID midHapticRun;
/* static fields */
static jfieldID fidSeparateMouseAndTouch;
/* Accelerometer data storage */ /* Accelerometer data storage */
static float fLastAccelerometer[3]; static float fLastAccelerometer[3];
static SDL_bool bHasNewData; static SDL_bool bHasNewData;
@ -253,6 +256,13 @@ JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls)
!midPollInputDevices || !midPollHapticDevices || !midHapticRun) { !midPollInputDevices || !midPollHapticDevices || !midHapticRun) {
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java callbacks, check that they're named and typed correctly"); __android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java callbacks, check that they're named and typed correctly");
} }
fidSeparateMouseAndTouch = (*mEnv)->GetStaticFieldID(mEnv, mActivityClass, "mSeparateMouseAndTouch", "Z");
if (!fidSeparateMouseAndTouch) {
__android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java static fields, check that they're named and typed correctly");
}
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!"); __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!");
} }
@ -693,11 +703,6 @@ int Android_JNI_SetupThread(void)
return 1; return 1;
} }
jclass Android_JNI_GetActivityClass(void)
{
return mActivityClass;
}
/* /*
* Audio support * Audio support
*/ */
@ -1590,6 +1595,13 @@ int Android_JNI_GetTouchDeviceIds(int **ids) {
return number; return number;
} }
/* sets the mSeparateMouseAndTouch field */
void Android_JNI_SetSeparateMouseAndTouch(SDL_bool new_value)
{
JNIEnv *env = Android_JNI_GetEnv();
(*env)->SetStaticBooleanField(env, mActivityClass, fidSeparateMouseAndTouch, new_value ? JNI_TRUE : JNI_FALSE);
}
void Android_JNI_PollInputDevices(void) void Android_JNI_PollInputDevices(void)
{ {
JNIEnv *env = Android_JNI_GetEnv(); JNIEnv *env = Android_JNI_GetEnv();

View File

@ -76,12 +76,12 @@ void Android_JNI_SuspendScreenSaver(SDL_bool suspend);
/* Touch support */ /* Touch support */
int Android_JNI_GetTouchDeviceIds(int **ids); int Android_JNI_GetTouchDeviceIds(int **ids);
void Android_JNI_SetSeparateMouseAndTouch(SDL_bool new_value);
/* Threads */ /* Threads */
#include <jni.h> #include <jni.h>
JNIEnv *Android_JNI_GetEnv(void); JNIEnv *Android_JNI_GetEnv(void);
int Android_JNI_SetupThread(void); int Android_JNI_SetupThread(void);
jclass Android_JNI_GetActivityClass(void);
/* Generic messages */ /* Generic messages */
int Android_JNI_SendMessage(int command, int param); int Android_JNI_SendMessage(int command, int param);

View File

@ -56,12 +56,9 @@ static void
SeparateEventsHintWatcher(void *userdata, const char *name, SeparateEventsHintWatcher(void *userdata, const char *name,
const char *oldValue, const char *newValue) const char *oldValue, const char *newValue)
{ {
jclass mActivityClass = Android_JNI_GetActivityClass();
JNIEnv *env = Android_JNI_GetEnv();
jfieldID fid = (*env)->GetStaticFieldID(env, mActivityClass, "mSeparateMouseAndTouch", "Z");
separate_mouse_and_touch = (newValue && (SDL_strcmp(newValue, "1") == 0)); separate_mouse_and_touch = (newValue && (SDL_strcmp(newValue, "1") == 0));
(*env)->SetStaticBooleanField(env, mActivityClass, fid, separate_mouse_and_touch ? JNI_TRUE : JNI_FALSE);
Android_JNI_SetSeparateMouseAndTouch(separate_mouse_and_touch);
} }
void Android_InitTouch(void) void Android_InitTouch(void)