diff -r 01966f6feadc android-project/src/org/libsdl/app/SDLActivity.java --- a/android-project/src/org/libsdl/app/SDLActivity.java Thu Jan 29 13:33:53 2015 -0800 +++ b/android-project/src/org/libsdl/app/SDLActivity.java Fri Feb 06 16:23:31 2015 +0100 @@ -27,6 +27,8 @@ import android.graphics.drawable.Drawable; import android.media.*; import android.hardware.*; +import android.content.Intent; +import android.net.Uri; /** SDL Activity @@ -433,6 +435,21 @@ /** * This method is called by SDL using JNI. */ + public static int openURL(String url) + { + try { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(url)); + mSingleton.startActivity(i); + } catch (Exception ex) { + return -1; + } + return 0; + } + + /** + * This method is called by SDL using JNI. + */ public static boolean sendMessage(int command, int param) { return mSingleton.sendCommand(command, Integer.valueOf(param)); } diff -r 01966f6feadc include/SDL_filesystem.h --- a/include/SDL_filesystem.h Thu Jan 29 13:33:53 2015 -0800 +++ b/include/SDL_filesystem.h Fri Feb 06 16:23:31 2015 +0100 @@ -125,6 +125,15 @@ */ extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); +/** + * \brief Open an URL in a web browser + * + * \param url The URL to open (ex: "http://www.libsdl.org") + * + * \return 0 on success, -1 on error + */ +extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff -r 01966f6feadc src/core/android/SDL_android.c --- a/src/core/android/SDL_android.c Thu Jan 29 13:33:53 2015 -0800 +++ b/src/core/android/SDL_android.c Fri Feb 06 16:23:31 2015 +0100 @@ -477,6 +477,21 @@ } } +int Android_JNI_OpenURL(const char *url) +{ + int retval = -1; + jmethodID mid; + JNIEnv *mEnv = Android_JNI_GetEnv(); + mid = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass,"openURL","(Ljava/lang/String;)I"); + if (mid) { + jstring jurl = (jstring)((*mEnv)->NewStringUTF(mEnv, url)); + retval = (*mEnv)->CallStaticIntMethod(mEnv, mActivityClass, mid, jurl); + (*mEnv)->DeleteLocalRef(mEnv, jurl); + } + + return retval; +} + SDL_bool Android_JNI_GetAccelerometerValues(float values[3]) { int i; diff -r 01966f6feadc src/core/android/SDL_android.h --- a/src/core/android/SDL_android.h Thu Jan 29 13:33:53 2015 -0800 +++ b/src/core/android/SDL_android.h Fri Feb 06 16:23:31 2015 +0100 @@ -37,6 +37,8 @@ extern SDL_bool Android_JNI_DeleteContext(void); */ extern void Android_JNI_SwapWindow(); extern void Android_JNI_SetActivityTitle(const char *title); +extern int Android_JNI_OpenURL(const char *url); + extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]); extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect); extern void Android_JNI_HideTextInput(); diff -r 01966f6feadc src/dynapi/SDL_dynapi_overrides.h --- a/src/dynapi/SDL_dynapi_overrides.h Thu Jan 29 13:33:53 2015 -0800 +++ b/src/dynapi/SDL_dynapi_overrides.h Fri Feb 06 16:23:31 2015 +0100 @@ -138,6 +138,7 @@ #define SDL_RegisterEvents SDL_RegisterEvents_REAL #define SDL_GetBasePath SDL_GetBasePath_REAL #define SDL_GetPrefPath SDL_GetPrefPath_REAL +#define SDL_OpenURL SDL_OpenURL_REAL #define SDL_GameControllerAddMapping SDL_GameControllerAddMapping_REAL #define SDL_GameControllerMappingForGUID SDL_GameControllerMappingForGUID_REAL #define SDL_GameControllerMapping SDL_GameControllerMapping_REAL diff -r 01966f6feadc src/dynapi/SDL_dynapi_procs.h --- a/src/dynapi/SDL_dynapi_procs.h Thu Jan 29 13:33:53 2015 -0800 +++ b/src/dynapi/SDL_dynapi_procs.h Fri Feb 06 16:23:31 2015 +0100 @@ -167,6 +167,7 @@ SDL_DYNAPI_PROC(Uint32,SDL_RegisterEvents,(int a),(a),return) SDL_DYNAPI_PROC(char*,SDL_GetBasePath,(void),(),return) SDL_DYNAPI_PROC(char*,SDL_GetPrefPath,(const char *a, const char *b),(a,b),return) +SDL_DYNAPI_PROC(int,SDL_OpenURL,(const char *a),(a),return) SDL_DYNAPI_PROC(int,SDL_GameControllerAddMapping,(const char *a),(a),return) SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForGUID,(SDL_JoystickGUID a),(a),return) SDL_DYNAPI_PROC(char*,SDL_GameControllerMapping,(SDL_GameController *a),(a),return) diff -r 01966f6feadc src/filesystem/android/SDL_sysfilesystem.c --- a/src/filesystem/android/SDL_sysfilesystem.c Thu Jan 29 13:33:53 2015 -0800 +++ b/src/filesystem/android/SDL_sysfilesystem.c Fri Feb 06 16:23:31 2015 +0100 @@ -57,6 +57,16 @@ return NULL; } +int +SDL_OpenURL(const char *url) +{ + if (url == NULL) { + return SDL_InvalidParamError("url"); + } + + return Android_JNI_OpenURL(url); +} + #endif /* SDL_FILESYSTEM_ANDROID */ /* vi: set ts=4 sw=4 expandtab: */ diff -r 01966f6feadc src/filesystem/cocoa/SDL_sysfilesystem.m --- a/src/filesystem/cocoa/SDL_sysfilesystem.m Thu Jan 29 13:33:53 2015 -0800 +++ b/src/filesystem/cocoa/SDL_sysfilesystem.m Fri Feb 06 16:23:31 2015 +0100 @@ -98,6 +98,21 @@ return retval; }} + +/* + * + * TODO FIXME: dont know if this even compile ... + */ +#if 0 +int +SDL_OpenURL(const char *url) +{ @autoreleasepool +{ + NSURL the_url = [NSURL URLWithString:@"http://www.apple.com"]; + [[NSWorkspace sharedWorkspace] openURL:the_url]; +}} +#endif + #endif /* SDL_FILESYSTEM_COCOA */ /* vi: set ts=4 sw=4 expandtab: */ diff -r 01966f6feadc src/filesystem/unix/SDL_sysfilesystem.c --- a/src/filesystem/unix/SDL_sysfilesystem.c Thu Jan 29 13:33:53 2015 -0800 +++ b/src/filesystem/unix/SDL_sysfilesystem.c Fri Feb 06 16:23:31 2015 +0100 @@ -205,6 +205,28 @@ return retval; } +int +SDL_OpenURL(const char *url) +{ + int ret = 0; + char cmd[PATH_MAX]; + + if (url == NULL) { + return SDL_InvalidParamError("url"); + } + + SDL_strlcpy(cmd, "xdg-open ", PATH_MAX); + SDL_strlcat(cmd, url, PATH_MAX); + + ret = system(cmd); + + if (ret == 0) { + return 0; + } + + return -1; +} + #endif /* SDL_FILESYSTEM_UNIX */ /* vi: set ts=4 sw=4 expandtab: */