From 72a244da419cf6286d96419e632602b546d2e6b0 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 26 May 2015 20:36:45 -0400 Subject: [PATCH] Android: Added basic drop file support (thanks, "noxalus"!). This lets SDL-based apps respond to "Open With" commands properly, as they can now obtain the requested path via a standard SDL dropfile event. This is only checked on startup, so apps don't get drop events at any other time, even if Android supports that, but this is still a definite improvement. Fixes Bugzilla #2762. --- android-project/src/org/libsdl/app/SDLActivity.java | 12 ++++++++++++ src/core/android/SDL_android.c | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index 5e8810836..0c5fa580b 100644 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -173,6 +173,17 @@ public class SDLActivity extends Activity { mLayout.addView(mSurface); setContentView(mLayout); + + // Get filename from "Open with" of another application + Intent intent = getIntent(); + + if (intent != null && intent.getData() != null) { + String filename = intent.getData().getPath(); + if (filename != null) { + Log.v("SDL", "Get filename:" + filename); + SDLActivity.onNativeDropFile(filename); + } + } } // Events @@ -397,6 +408,7 @@ public class SDLActivity extends Activity { public static native void nativeQuit(); public static native void nativePause(); public static native void nativeResume(); + public static native void onNativeDropFile(String filename); public static native void onNativeResize(int x, int y, int format, float rate); public static native int onNativePadDown(int device_id, int keycode); public static native int onNativePadUp(int device_id, int keycode); diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index e74e65e76..cac0872c8 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -141,6 +141,16 @@ JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls) __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!"); } +/* Drop file */ +void Java_org_libsdl_app_SDLActivity_onNativeDropFile( + JNIEnv* env, jclass jcls, + jstring filename) +{ + const char *path = (*env)->GetStringUTFChars(env, filename, NULL); + SDL_SendDropFile(path); + (*env)->ReleaseStringUTFChars(env, filename, path); +} + /* Resize */ JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize( JNIEnv* env, jclass jcls,