Android: add robustness. check that the native code is run for the first time.
parent
ae9d8acc3b
commit
8096f7269b
|
@ -398,6 +398,24 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Control activity re-creation */
|
||||||
|
/* Robustness: check that the native code is run for the first time.
|
||||||
|
* (Maybe Activity was reset, but not the native code.) */
|
||||||
|
{
|
||||||
|
int run_count = SDLActivity.nativeCheckSDLThreadCounter(); /* get and increment a native counter */
|
||||||
|
if (run_count != 0) {
|
||||||
|
boolean allow_recreate = SDLActivity.nativeAllowRecreateActivity();
|
||||||
|
if (allow_recreate) {
|
||||||
|
Log.v(TAG, "activity re-created // run_count: " + run_count);
|
||||||
|
} else {
|
||||||
|
Log.v(TAG, "activity finished // run_count: " + run_count);
|
||||||
|
System.exit(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set up JNI
|
// Set up JNI
|
||||||
SDL.setupJNI();
|
SDL.setupJNI();
|
||||||
|
|
||||||
|
@ -971,6 +989,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
||||||
public static native void onNativeLocaleChanged();
|
public static native void onNativeLocaleChanged();
|
||||||
public static native void onNativeDarkModeChanged(boolean enabled);
|
public static native void onNativeDarkModeChanged(boolean enabled);
|
||||||
public static native boolean nativeAllowRecreateActivity();
|
public static native boolean nativeAllowRecreateActivity();
|
||||||
|
public static native int nativeCheckSDLThreadCounter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called by SDL using JNI.
|
* This method is called by SDL using JNI.
|
||||||
|
|
|
@ -170,6 +170,9 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePermissionResult)(
|
||||||
JNIEXPORT jboolean JNICALL SDL_JAVA_INTERFACE(nativeAllowRecreateActivity)(
|
JNIEXPORT jboolean JNICALL SDL_JAVA_INTERFACE(nativeAllowRecreateActivity)(
|
||||||
JNIEnv *env, jclass jcls);
|
JNIEnv *env, jclass jcls);
|
||||||
|
|
||||||
|
JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeCheckSDLThreadCounter)(
|
||||||
|
JNIEnv *env, jclass jcls);
|
||||||
|
|
||||||
static JNINativeMethod SDLActivity_tab[] = {
|
static JNINativeMethod SDLActivity_tab[] = {
|
||||||
{ "nativeGetVersion", "()Ljava/lang/String;", SDL_JAVA_INTERFACE(nativeGetVersion) },
|
{ "nativeGetVersion", "()Ljava/lang/String;", SDL_JAVA_INTERFACE(nativeGetVersion) },
|
||||||
{ "nativeSetupJNI", "()I", SDL_JAVA_INTERFACE(nativeSetupJNI) },
|
{ "nativeSetupJNI", "()I", SDL_JAVA_INTERFACE(nativeSetupJNI) },
|
||||||
|
@ -203,6 +206,7 @@ static JNINativeMethod SDLActivity_tab[] = {
|
||||||
{ "nativeAddTouch", "(ILjava/lang/String;)V", SDL_JAVA_INTERFACE(nativeAddTouch) },
|
{ "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) },
|
{ "nativeAllowRecreateActivity", "()Z", SDL_JAVA_INTERFACE(nativeAllowRecreateActivity) },
|
||||||
|
{ "nativeCheckSDLThreadCounter", "()I", SDL_JAVA_INTERFACE(nativeCheckSDLThreadCounter) }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Java class SDLInputConnection */
|
/* Java class SDLInputConnection */
|
||||||
|
@ -738,7 +742,15 @@ JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(JNIEnv *env
|
||||||
/* SDL main function prototype */
|
/* SDL main function prototype */
|
||||||
typedef int (*SDL_main_func)(int argc, char *argv[]);
|
typedef int (*SDL_main_func)(int argc, char *argv[]);
|
||||||
|
|
||||||
static int run_count = 1;
|
static int run_count = 0;
|
||||||
|
|
||||||
|
JNIEXPORT int JNICALL SDL_JAVA_INTERFACE(nativeCheckSDLThreadCounter)(
|
||||||
|
JNIEnv *env, jclass jcls)
|
||||||
|
{
|
||||||
|
int tmp = run_count;
|
||||||
|
run_count += 1;
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
static void SDLCALL SDL_AllowRecreateActivityChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
|
static void SDLCALL SDL_AllowRecreateActivityChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue