mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-06-06 15:30:50 +00:00
Added the ability to set SDL hints from AndroidManifest.xml (thanks Rachel!)
This is especially useful for things like the accelerometer hint which could be needed before application main().
This commit is contained in:
parent
45536710f3
commit
8fd0c22adc
5 changed files with 88 additions and 2 deletions
|
@ -211,6 +211,7 @@ static jmethodID midClipboardSetText;
|
|||
static jmethodID midClipboardGetText;
|
||||
static jmethodID midClipboardHasText;
|
||||
static jmethodID midOpenAPKExpansionInputStream;
|
||||
static jmethodID midGetManifestEnvironmentVariable;
|
||||
|
||||
/* audio manager */
|
||||
static jclass mAudioManagerClass;
|
||||
|
@ -310,11 +311,14 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeSetupJNI)(JNIEnv* mEnv, jclass c
|
|||
midOpenAPKExpansionInputStream = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
"openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;");
|
||||
|
||||
midGetManifestEnvironmentVariable = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,
|
||||
"getManifestEnvironmentVariable", "(Ljava/lang/String;)Ljava/lang/String;");
|
||||
|
||||
if (!midGetNativeSurface ||
|
||||
!midSetActivityTitle || !midSetOrientation || !midGetContext || !midInputGetInputDeviceIds ||
|
||||
!midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown ||
|
||||
!midClipboardSetText || !midClipboardGetText || !midClipboardHasText ||
|
||||
!midOpenAPKExpansionInputStream) {
|
||||
!midOpenAPKExpansionInputStream || !midGetManifestEnvironmentVariable) {
|
||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLActivity.java?");
|
||||
}
|
||||
|
||||
|
@ -2034,6 +2038,41 @@ const char * SDL_AndroidGetExternalStoragePath(void)
|
|||
return s_AndroidExternalFilesPath;
|
||||
}
|
||||
|
||||
// Ugh, but we have to SDL_strdup() our result to pass it safely back
|
||||
// out into normal SDL_getenv flow. So we'll just do the same sort
|
||||
// of trick as on Win32 over in SDL_getenv.c.
|
||||
char *SDL_AndroidEnvMem;
|
||||
|
||||
char *SDL_AndroidGetManifestEnvironmentVariable(const char *variableName)
|
||||
{
|
||||
if ((mActivityClass == NULL) || (midGetManifestEnvironmentVariable == 0)) {
|
||||
__android_log_print(ANDROID_LOG_WARN, "SDL", "request to get environment variable before JNI is ready: %s", variableName);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
JNIEnv *env = Android_JNI_GetEnv();
|
||||
|
||||
jstring jVariableName = (*env)->NewStringUTF(env, variableName);
|
||||
jstring jResult = (jstring)((*env)->CallStaticObjectMethod(env, mActivityClass, midGetManifestEnvironmentVariable, jVariableName));
|
||||
|
||||
if (jResult == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (SDL_AndroidEnvMem) {
|
||||
SDL_free(SDL_AndroidEnvMem);
|
||||
SDL_AndroidEnvMem = NULL;
|
||||
}
|
||||
|
||||
const char *result = (*env)->GetStringUTFChars(env, jResult, NULL);
|
||||
SDL_AndroidEnvMem = SDL_strdup(result);
|
||||
(*env)->ReleaseStringUTFChars(env, jResult, result);
|
||||
(*env)->DeleteLocalRef(env, jResult);
|
||||
|
||||
__android_log_print(ANDROID_LOG_INFO, "SDL", "environment variable in metadata: %s = %s", variableName, SDL_AndroidEnvMem);
|
||||
return SDL_AndroidEnvMem;
|
||||
}
|
||||
|
||||
#endif /* __ANDROID__ */
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue