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.
This commit is contained in:
Ryan C. Gordon 2015-05-26 20:36:45 -04:00
parent ae6555dff8
commit 72a244da41
2 changed files with 22 additions and 0 deletions

View File

@ -173,6 +173,17 @@ public class SDLActivity extends Activity {
mLayout.addView(mSurface); mLayout.addView(mSurface);
setContentView(mLayout); 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 // Events
@ -397,6 +408,7 @@ public class SDLActivity extends Activity {
public static native void nativeQuit(); public static native void nativeQuit();
public static native void nativePause(); public static native void nativePause();
public static native void nativeResume(); 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 void onNativeResize(int x, int y, int format, float rate);
public static native int onNativePadDown(int device_id, int keycode); public static native int onNativePadDown(int device_id, int keycode);
public static native int onNativePadUp(int device_id, int keycode); public static native int onNativePadUp(int device_id, int keycode);

View File

@ -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!"); __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 */ /* Resize */
JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize( JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize(
JNIEnv* env, jclass jcls, JNIEnv* env, jclass jcls,