From 50e422adfe57cbb9bb2173c106b726d9f58e712b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 4 Nov 2017 22:03:28 -0700 Subject: [PATCH] Fixed bug 3917 - Android, issues with getManifestEnvironmentVariable Sylvain What about getting some return code instead of creating another native function. --- .../src/main/java/org/libsdl/app/SDLActivity.java | 9 +++++---- src/core/android/SDL_android.c | 15 ++++++--------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index be8aeccad6128..a6f6e4eb8c098 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -513,7 +513,6 @@ public static native void onNativeTouch(int touchDevId, int pointerFingerId, public static native void onNativeSurfaceDestroyed(); public static native String nativeGetHint(String name); public static native void nativeSetenv(String name, String value); - public static native void nativeEnvironmentVariablesSet(); /** * This method is called by SDL using JNI. @@ -618,12 +617,12 @@ public static DisplayMetrics getDisplayDPI() { /** * This method is called by SDL using JNI. */ - public static void getManifestEnvironmentVariables() { + public static boolean getManifestEnvironmentVariables() { try { ApplicationInfo applicationInfo = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = applicationInfo.metaData; if (bundle == null) { - return; + return false; } String prefix = "SDL_ENV."; final int trimLength = prefix.length(); @@ -634,10 +633,12 @@ public static void getManifestEnvironmentVariables() { nativeSetenv(name, value); } } - nativeEnvironmentVariablesSet(); + /* environment variables set! */ + return true; } catch (Exception e) { Log.v("SDL", "exception " + e.toString()); } + return false; } static class ShowTextInputTask implements Runnable { diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index 28f9a19d85d72..02afdf1cc21c6 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -251,7 +251,7 @@ static jfieldID fidSeparateMouseAndTouch; static float fLastAccelerometer[3]; static SDL_bool bHasNewData; -static SDL_bool bHasEnvironmentVariables; +static SDL_bool bHasEnvironmentVariables = SDL_FALSE; /******************************************************************************* Functions called by JNI @@ -324,7 +324,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c "openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;"); midGetManifestEnvironmentVariables = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, - "getManifestEnvironmentVariables", "()V"); + "getManifestEnvironmentVariables", "()Z"); midGetDisplayDPI = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "getDisplayDPI", "()Landroid/util/DisplayMetrics;"); @@ -831,12 +831,6 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetenv)( } -JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeEnvironmentVariablesSet)( - JNIEnv* env, jclass cls) -{ - bHasEnvironmentVariables = SDL_TRUE; -} - /******************************************************************************* Functions called by SDL into Java *******************************************************************************/ @@ -2143,7 +2137,10 @@ void Android_JNI_GetManifestEnvironmentVariables(void) if (!bHasEnvironmentVariables) { JNIEnv *env = Android_JNI_GetEnv(); - (*env)->CallStaticVoidMethod(env, mActivityClass, midGetManifestEnvironmentVariables); + SDL_bool ret = (*env)->CallStaticBooleanMethod(env, mActivityClass, midGetManifestEnvironmentVariables); + if (ret) { + bHasEnvironmentVariables = SDL_TRUE; + } } }