|
@@ -33,6 +33,7 @@
|
|
|
#include "../../joystick/android/SDL_sysjoystick_c.h"
|
|
|
#include "../../haptic/android/SDL_syshaptic_c.h"
|
|
|
#include "../../hidapi/android/hid.h"
|
|
|
+#include "../../SDL_hints_c.h"
|
|
|
|
|
|
#include <android/log.h>
|
|
|
#include <android/configuration.h>
|
|
@@ -166,6 +167,9 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePermissionResult)(
|
|
|
JNIEnv *env, jclass cls,
|
|
|
jint requestCode, jboolean result);
|
|
|
|
|
|
+JNIEXPORT jboolean JNICALL SDL_JAVA_INTERFACE(nativeAllowRecreateActivity)(
|
|
|
+ JNIEnv *env, jclass jcls);
|
|
|
+
|
|
|
static JNINativeMethod SDLActivity_tab[] = {
|
|
|
{ "nativeGetVersion", "()Ljava/lang/String;", SDL_JAVA_INTERFACE(nativeGetVersion) },
|
|
|
{ "nativeSetupJNI", "()I", SDL_JAVA_INTERFACE(nativeSetupJNI) },
|
|
@@ -197,7 +201,8 @@ static JNINativeMethod SDLActivity_tab[] = {
|
|
|
{ "nativeSetenv", "(Ljava/lang/String;Ljava/lang/String;)V", SDL_JAVA_INTERFACE(nativeSetenv) },
|
|
|
{ "onNativeOrientationChanged", "(I)V", SDL_JAVA_INTERFACE(onNativeOrientationChanged) },
|
|
|
{ "nativeAddTouch", "(ILjava/lang/String;)V", SDL_JAVA_INTERFACE(nativeAddTouch) },
|
|
|
- { "nativePermissionResult", "(IZ)V", SDL_JAVA_INTERFACE(nativePermissionResult) }
|
|
|
+ { "nativePermissionResult", "(IZ)V", SDL_JAVA_INTERFACE(nativePermissionResult) },
|
|
|
+ { "nativeAllowRecreateActivity", "()Z", SDL_JAVA_INTERFACE(nativeAllowRecreateActivity) },
|
|
|
};
|
|
|
|
|
|
/* Java class SDLInputConnection */
|
|
@@ -375,6 +380,9 @@ static void Internal_Android_Destroy_AssetManager(void);
|
|
|
static AAssetManager *asset_manager = NULL;
|
|
|
static jobject javaAssetManagerRef = 0;
|
|
|
|
|
|
+/* Re-create activity hint */
|
|
|
+static SDL_AtomicInt bAllowRecreateActivity;
|
|
|
+
|
|
|
/*******************************************************************************
|
|
|
Functions called by JNI
|
|
|
*******************************************************************************/
|
|
@@ -525,6 +533,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
|
|
|
register_methods(env, "org/libsdl/app/SDLAudioManager", SDLAudioManager_tab, SDL_arraysize(SDLAudioManager_tab));
|
|
|
register_methods(env, "org/libsdl/app/SDLControllerManager", SDLControllerManager_tab, SDL_arraysize(SDLControllerManager_tab));
|
|
|
register_methods(env, "org/libsdl/app/HIDDeviceManager", HIDDeviceManager_tab, SDL_arraysize(HIDDeviceManager_tab));
|
|
|
+ SDL_AtomicSet(&bAllowRecreateActivity, SDL_FALSE);
|
|
|
|
|
|
return JNI_VERSION_1_4;
|
|
|
}
|
|
@@ -731,6 +740,21 @@ typedef int (*SDL_main_func)(int argc, char *argv[]);
|
|
|
|
|
|
static int run_count = 1;
|
|
|
|
|
|
+static void SDLCALL SDL_AllowRecreateActivityChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
|
|
|
+{
|
|
|
+ if (SDL_GetStringBoolean(hint, SDL_FALSE)) {
|
|
|
+ SDL_AtomicSet(&bAllowRecreateActivity, SDL_TRUE);
|
|
|
+ } else {
|
|
|
+ SDL_AtomicSet(&bAllowRecreateActivity, SDL_FALSE);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+JNIEXPORT jboolean JNICALL SDL_JAVA_INTERFACE(nativeAllowRecreateActivity)(
|
|
|
+ JNIEnv *env, jclass jcls)
|
|
|
+{
|
|
|
+ return SDL_AtomicGet(&bAllowRecreateActivity);
|
|
|
+}
|
|
|
+
|
|
|
/* Start up the SDL app */
|
|
|
JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeRunMain)(JNIEnv *env, jclass cls, jstring library, jstring function, jobject array)
|
|
|
{
|
|
@@ -739,6 +763,9 @@ JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeRunMain)(JNIEnv *env, jclass cls,
|
|
|
void *library_handle;
|
|
|
|
|
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeRunMain() %d time", run_count);
|
|
|
+ if (run_count == 1) {
|
|
|
+ SDL_AddHintCallback(SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY, SDL_AllowRecreateActivityChanged, NULL);
|
|
|
+ }
|
|
|
run_count += 1;
|
|
|
|
|
|
/* Save JNIEnv of SDLThread */
|