Android: Added basic drop file support (thanks, "noxalus"!).
authorRyan C. Gordon <icculus@icculus.org>
Tue, 26 May 2015 20:36:45 -0400
changeset 9640 d86771e28c51
parent 9639 044cafe15108
child 9641 425c1100b496
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
src/core/android/SDL_android.c
--- a/android-project/src/org/libsdl/app/SDLActivity.java	Tue May 26 20:22:14 2015 -0400
+++ b/android-project/src/org/libsdl/app/SDLActivity.java	Tue May 26 20:36:45 2015 -0400
@@ -173,6 +173,17 @@
         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 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);
--- a/src/core/android/SDL_android.c	Tue May 26 20:22:14 2015 -0400
+++ b/src/core/android/SDL_android.c	Tue May 26 20:36:45 2015 -0400
@@ -141,6 +141,16 @@
     __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,