diff --git a/src/common/android.cpp b/src/common/android.cpp index 25c68e44b..6be664093 100644 --- a/src/common/android.cpp +++ b/src/common/android.cpp @@ -27,7 +27,11 @@ #include #include +#if __has_include() +#include +#else #include +#endif #include #include @@ -40,6 +44,14 @@ #include "libraries/physfs/physfs.h" #include "filesystem/physfs/PhysfsIo.h" +// Backward compatibility +#if !SDL_VERSION_ATLEAST(3, 0, 0) +#define SDL_GetAndroidJNIEnv SDL_AndroidGetJNIEnv +#define SDL_GetAndroidActivity SDL_AndroidGetActivity +#define SDL_GetAndroidInternalStoragePath SDL_AndroidGetInternalStoragePath +#define SDL_GetAndroidExternalStoragePath SDL_AndroidGetExternalStoragePath +#endif + namespace love { namespace android @@ -47,8 +59,8 @@ namespace android void setImmersive(bool immersive_active) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID setImmersiveMethod = env->GetMethodID(clazz, "setImmersiveMode", "(Z)V"); @@ -60,8 +72,8 @@ void setImmersive(bool immersive_active) bool getImmersive() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID getImmersiveMethod = env->GetMethodID(clazz, "getImmersiveMode", "()Z"); @@ -79,8 +91,8 @@ double getScreenScale() if (result == -1.) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); jmethodID getDPIMethod = env->GetMethodID(clazz, "getDPIScale", "()F"); @@ -95,8 +107,8 @@ double getScreenScale() bool getSafeArea(int &top, int &left, int &bottom, int &right) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); jclass rectClass = env->FindClass("android/graphics/Rect"); jmethodID methodID = env->GetMethodID(clazz, "getSafeArea", "()Landroid/graphics/Rect;"); @@ -125,8 +137,8 @@ bool openURL(const std::string &url) void vibrate(double seconds) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID vibrateMethod = env->GetMethodID(clazz, "vibrate", "(D)V"); @@ -198,8 +210,8 @@ inline bool tryCreateDirectory(const char *path) bool createStorageDirectories() { - std::string internalStoragePath = SDL_AndroidGetInternalStoragePath(); - std::string externalStoragePath = SDL_AndroidGetExternalStoragePath(); + std::string internalStoragePath = SDL_GetAndroidInternalStoragePath(); + std::string externalStoragePath = SDL_GetAndroidExternalStoragePath(); std::string saveDirectoryInternal = internalStoragePath + "/save"; if (!tryCreateDirectory(saveDirectoryInternal.c_str())) @@ -257,8 +269,8 @@ void fixupExternalStoragePermission(const std::string &savedir, const std::strin bool hasBackgroundMusic() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz(env->GetObjectClass(activity)); jmethodID method_id = env->GetMethodID(clazz, "hasBackgroundMusic", "()Z"); @@ -273,8 +285,8 @@ bool hasBackgroundMusic() bool hasRecordingPermission() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID methodID = env->GetMethodID(clazz, "hasRecordAudioPermission", "()Z"); @@ -294,8 +306,8 @@ bool hasRecordingPermission() void requestRecordingPermission() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz(env->GetObjectClass(activity)); jmethodID methodID = env->GetMethodID(clazz, "requestRecordAudioPermission", "()V"); @@ -310,8 +322,8 @@ void requestRecordingPermission() void showRecordingPermissionMissingDialog() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz(env->GetObjectClass(activity)); jmethodID methodID = env->GetMethodID(clazz, "showRecordingAudioPermissionMissingDialog", "()V"); @@ -330,7 +342,7 @@ class AssetManagerObject public: AssetManagerObject() { - JNIEnv *env = (JNIEnv *) SDL_AndroidGetJNIEnv(); + JNIEnv *env = (JNIEnv *) SDL_GetAndroidJNIEnv(); jobject am = getLocalAssetManager(env); assetManager = env->NewGlobalRef(am); @@ -339,12 +351,12 @@ class AssetManagerObject ~AssetManagerObject() { - JNIEnv *env = (JNIEnv *) SDL_AndroidGetJNIEnv(); + JNIEnv *env = (JNIEnv *) SDL_GetAndroidJNIEnv(); env->DeleteGlobalRef(assetManager); } static jobject getLocalAssetManager(JNIEnv *env) { - jobject self = (jobject) SDL_AndroidGetActivity(); + jobject self = (jobject) SDL_GetAndroidActivity(); jclass activity = env->GetObjectClass(self); jmethodID method = env->GetMethodID(activity, "getAssets", "()Landroid/content/res/AssetManager;"); jobject am = env->CallObjectMethod(self, method); @@ -375,7 +387,7 @@ static jobject getJavaAssetManager() static AAssetManager *getAssetManager() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); return AAssetManager_fromJava(env, (jobject) getJavaAssetManager()); } @@ -489,8 +501,8 @@ void *openArchive(PHYSFS_Io *io, const char *name, int forWrite, int *claimed) { // AAssetDir_getNextFileName intentionally excludes directories, so // we have to use JNI that calls AssetManager.list() recursively. - JNIEnv *env = (JNIEnv *) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv *) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); jmethodID method = env->GetMethodID(clazz, "buildFileTree", "()[Ljava/lang/String;"); @@ -541,7 +553,7 @@ PHYSFS_EnumerateCallbackResult enumerate( } } - JNIEnv *env = (JNIEnv *) SDL_AndroidGetJNIEnv(); + JNIEnv *env = (JNIEnv *) SDL_GetAndroidJNIEnv(); jobject assetManager = getJavaAssetManager(); jclass clazz = env->GetObjectClass(assetManager); jmethodID method = env->GetMethodID(clazz, "list", "(Ljava/lang/String;)[Ljava/lang/String;"); @@ -760,8 +772,8 @@ const char *getCRequirePath() if (!initialized) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID getCRequireMethod = env->GetMethodID(clazz, "getCRequirePath", "()Ljava/lang/String;"); @@ -788,8 +800,8 @@ int getFDFromContentProtocol(const char *path) if (strstr(path, "content://") == path) { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); - jobject activity = (jobject) SDL_AndroidGetActivity(); + JNIEnv *env = (JNIEnv*) SDL_GetAndroidJNIEnv(); + jobject activity = (jobject) SDL_GetAndroidActivity(); jclass clazz = env->GetObjectClass(activity); static jmethodID converter = env->GetMethodID(clazz, "convertToFileDescriptor", "(Ljava/lang/String;)I"); @@ -926,8 +938,8 @@ void *getIOFromFD(int fd) const char *getArg0() { static PHYSFS_AndroidInit androidInit = {nullptr, nullptr}; - androidInit.jnienv = SDL_AndroidGetJNIEnv(); - androidInit.context = SDL_AndroidGetActivity(); + androidInit.jnienv = SDL_GetAndroidJNIEnv(); + androidInit.context = SDL_GetAndroidActivity(); return (const char *) &androidInit; } diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index 76e3f91b3..e680f4198 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -62,7 +62,11 @@ #include #ifdef LOVE_ANDROID +#if __has_include() +#include +#else #include +#endif #include "common/android.h" #endif @@ -630,10 +634,17 @@ std::string Filesystem::getFullCommonPath(CommonPath path) #elif defined(LOVE_ANDROID) std::string storagepath; - if (isAndroidSaveExternal()) +#if SDL_VERSION_ATLEAST(3, 0, 0) + if (isAndroidSaveExternal()) + storagepath = SDL_GetAndroidExternalStoragePath(); + else + storagepath = SDL_GetAndroidInternalStoragePath(); +#else + if (isAndroidSaveExternal()) storagepath = SDL_AndroidGetExternalStoragePath(); else storagepath = SDL_AndroidGetInternalStoragePath(); +#endif switch (path) { diff --git a/src/modules/love/love.cpp b/src/modules/love/love.cpp index b06447c7d..ccc55fd39 100644 --- a/src/modules/love/love.cpp +++ b/src/modules/love/love.cpp @@ -37,7 +37,11 @@ #endif // LOVE_WINDOWS #ifdef LOVE_ANDROID +#if __has_include() +#include +#else #include +#endif #endif // LOVE_ANDROID #ifdef LOVE_LEGENDARY_CONSOLE_IO_HACK