From e3082701a5349bd5bdfed91ba7dd4710cff9ee21 Mon Sep 17 00:00:00 2001 From: pelya Date: Sun, 15 Mar 2015 22:54:13 +0200 Subject: [PATCH] SDL: New API SDL_ANDROID_OpenExternalWebBrowser() to open URL in Android web browser or relevant app such as Youtube --- project/java/Video.java | 6 ++++++ project/jni/sdl-1.2/include/SDL_android.h | 3 +++ .../jni/sdl-1.2/src/video/android/SDL_androidvideo.c | 10 ++++++++++ 3 files changed, 19 insertions(+) diff --git a/project/java/Video.java b/project/java/Video.java index 3c2b49687..da7963403 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -62,6 +62,7 @@ import android.app.AlarmManager; import android.content.Intent; import android.view.View; import android.view.Display; +import android.net.Uri; class Mouse @@ -914,6 +915,11 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer return ret; } + + public void openExternalWebBrowser(String url) + { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); + } private int PowerOf2(int i) { diff --git a/project/jni/sdl-1.2/include/SDL_android.h b/project/jni/sdl-1.2/include/SDL_android.h index 8307ca4a3..43627f1f7 100644 --- a/project/jni/sdl-1.2/include/SDL_android.h +++ b/project/jni/sdl-1.2/include/SDL_android.h @@ -118,6 +118,9 @@ Returns 1 if load succeeded, 0 if user aborted sign-in, or there was no network */ extern DECLSPEC int SDLCALL SDL_ANDROID_CloudLoad(const char *filename, const char *saveId, const char *dialogTitle); +/* Open an Android web browser, or Chrome, or Youtube for video links */ +extern DECLSPEC void SDLCALL SDL_ANDROID_OpenExternalWebBrowser(const char *url); + #ifdef __cplusplus } #endif diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c index 82edb2441..af72a9375 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c @@ -84,6 +84,7 @@ static jmethodID JavaSetAdvertisementPosition = NULL; static jmethodID JavaRequestNewAdvertisement = NULL; static jmethodID JavaRequestCloudSave = NULL; static jmethodID JavaRequestCloudLoad = NULL; +static jmethodID JavaRequestOpenExternalWebBrowser = NULL; static int glContextLost = 0; static int showScreenKeyboardDeferred = 0; static const char * showScreenKeyboardOldText = ""; @@ -355,6 +356,7 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Z"); JavaRequestCloudLoad = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "cloudLoad", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z"); + JavaRequestOpenExternalWebBrowser = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "openExternalWebBrowser", "(Ljava/lang/String;)V"); ANDROID_InitOSKeymap(); } @@ -569,6 +571,14 @@ int SDLCALL SDL_ANDROID_CloudLoad(const char *filename, const char *saveId, cons return result; } +void SDLCALL SDL_ANDROID_OpenExternalWebBrowser(const char *url) +{ + (*JavaEnv)->PushLocalFrame(JavaEnv, 1); + jstring s1 = (*JavaEnv)->NewStringUTF(JavaEnv, url); + (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaRequestOpenExternalWebBrowser, s1 ); + (*JavaEnv)->DeleteLocalRef(JavaEnv, s1); + (*JavaEnv)->PopLocalFrame(JavaEnv, NULL); +} // Dummy callback for SDL2 to satisfy linker extern void SDL_Android_Init(JNIEnv* env, jclass cls);