diff --git a/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java b/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java index 2afe8f1a14..39f3e0d3b4 100644 --- a/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java +++ b/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java @@ -22,6 +22,7 @@ import android.preference.PreferenceManager; import android.provider.Settings; import android.util.Log; import android.widget.Toast; +import android.os.Environment; import com.retroarch.R; import com.retroarch.browser.NativeInterface; @@ -216,5 +217,8 @@ public final class MainMenuFragment extends PreferenceListFragment implements On retro.putExtra("CONFIGFILE", configFilePath); retro.putExtra("IME", imePath); retro.putExtra("DATADIR", dataDirPath); + retro.putExtra("SDCARD", Environment.getExternalStorageDirectory().getAbsolutePath()); + retro.putExtra("DOWNLOADS", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); + retro.putExtra("SCREENSHOTS", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()); } } diff --git a/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityIntent.java b/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityIntent.java index b8250b20cf..91ccc3f8a6 100644 --- a/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityIntent.java +++ b/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityIntent.java @@ -7,6 +7,7 @@ import android.util.Log; public class RetroActivityIntent extends RetroActivityCommon { private Intent pendingIntent = null; + private static final String TAG = "RetroArch"; @Override public void onBackPressed() @@ -56,6 +57,21 @@ public class RetroActivityIntent extends RetroActivityCommon { return pendingIntent.getStringExtra("CONFIGFILE"); } + public String getPendingIntentStorageLocation() + { + return pendingIntent.getStringExtra("SDCARD"); + } + + public String getPendingIntentDownloadLocation() + { + return pendingIntent.getStringExtra("DOWNLOADS"); + } + + public String getPendingIntentScreenshotsLocation() + { + return pendingIntent.getStringExtra("SCREENSHOTS"); + } + /** * Gets the specified IME in the pending intent. * diff --git a/frontend/drivers/platform_android.c b/frontend/drivers/platform_android.c index 5973463b50..2752ec9d94 100644 --- a/frontend/drivers/platform_android.c +++ b/frontend/drivers/platform_android.c @@ -437,6 +437,10 @@ static bool device_is_game_console(const char *name) return false; } +static char screenshot_dir[PATH_MAX_LENGTH]; +static char downloads_dir[PATH_MAX_LENGTH]; +static char sdcard_dir[PATH_MAX_LENGTH]; +static char app_dir[PATH_MAX_LENGTH]; static void frontend_android_get_environment_settings(int *argc, char *argv[], void *data, void *params_data) @@ -449,7 +453,7 @@ static void frontend_android_get_environment_settings(int *argc, jobject obj = NULL; jstring jstr = NULL; struct android_app *android_app = (struct android_app*)data; - + if (!android_app) return; @@ -568,63 +572,145 @@ static void frontend_android_get_environment_settings(int *argc, } } + /* External Storage */ + CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, + (*env)->NewStringUTF(env, "SDCARD")); + + if (android_app->getStringExtra && jstr) + { + const char *argv = NULL; + + *sdcard_dir = '\0'; + argv = (*env)->GetStringUTFChars(env, jstr, 0); + + if (argv && *argv) + strlcpy(sdcard_dir, argv, sizeof(sdcard_dir)); + (*env)->ReleaseStringUTFChars(env, jstr, argv); + + if (*sdcard_dir) + { + RARCH_LOG("External Storage Location %s.\n", sdcard_dir); + //todo base dir handler + } + } + + /* Screenshots */ + CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, + (*env)->NewStringUTF(env, "SCREENSHOTS")); + + if (android_app->getStringExtra && jstr) + { + const char *argv = NULL; + + *screenshot_dir = '\0'; + argv = (*env)->GetStringUTFChars(env, jstr, 0); + + if (argv && *argv) + strlcpy(screenshot_dir, argv, sizeof(screenshot_dir)); + (*env)->ReleaseStringUTFChars(env, jstr, argv); + + if (*screenshot_dir) + { + RARCH_LOG("Screenshot Directory [%s]s.\n", screenshot_dir); + //todo screenshot handler + } + } + + /* Downloads */ + CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, + (*env)->NewStringUTF(env, "DOWNLOADS")); + + if (android_app->getStringExtra && jstr) + { + const char *argv = NULL; + + *downloads_dir = '\0'; + argv = (*env)->GetStringUTFChars(env, jstr, 0); + + if (argv && *argv) + strlcpy(downloads_dir, argv, sizeof(downloads_dir)); + (*env)->ReleaseStringUTFChars(env, jstr, argv); + + if (*downloads_dir) + { + RARCH_LOG("Download Directory [%s].\n", downloads_dir); + //todo downloads handler + } + } + /* Content. */ CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "DATADIR")); if (android_app->getStringExtra && jstr) - { - static char path[PATH_MAX_LENGTH]; + { const char *argv = NULL; - *path = '\0'; + *app_dir = '\0'; argv = (*env)->GetStringUTFChars(env, jstr, 0); + if (argv && *argv) - strlcpy(path, argv, sizeof(path)); + strlcpy(app_dir, argv, sizeof(app_dir)); (*env)->ReleaseStringUTFChars(env, jstr, argv); - if (*path) + if (*app_dir) { - RARCH_LOG("Data path: [%s].\n", path); - if (args && *path) + RARCH_LOG("Application Dir: [%s].\n", app_dir); + if (args && *app_dir) { - fill_pathname_join(g_defaults.assets_dir, path, + fill_pathname_join(g_defaults.assets_dir, app_dir, "assets", sizeof(g_defaults.savestate_dir)); - fill_pathname_join(g_defaults.extraction_dir, path, + fill_pathname_join(g_defaults.extraction_dir, app_dir, "tmp", sizeof(g_defaults.extraction_dir)); - fill_pathname_join(g_defaults.shader_dir, path, + fill_pathname_join(g_defaults.shader_dir, app_dir, "shaders_glsl", sizeof(g_defaults.shader_dir)); - fill_pathname_join(g_defaults.overlay_dir, path, + fill_pathname_join(g_defaults.overlay_dir, app_dir, "overlays", sizeof(g_defaults.overlay_dir)); - fill_pathname_join(g_defaults.core_dir, path, + fill_pathname_join(g_defaults.core_dir, app_dir, "cores", sizeof(g_defaults.core_dir)); fill_pathname_join(g_defaults.core_info_dir, - path, "info", sizeof(g_defaults.core_info_dir)); + app_dir, "info", sizeof(g_defaults.core_info_dir)); fill_pathname_join(g_defaults.autoconfig_dir, - path, "autoconfig", sizeof(g_defaults.autoconfig_dir)); + app_dir, "autoconfig", sizeof(g_defaults.autoconfig_dir)); fill_pathname_join(g_defaults.audio_filter_dir, - path, "audio_filters", sizeof(g_defaults.audio_filter_dir)); + app_dir, "audio_filters", sizeof(g_defaults.audio_filter_dir)); fill_pathname_join(g_defaults.video_filter_dir, - path, "video_filters", sizeof(g_defaults.video_filter_dir)); + app_dir, "video_filters", sizeof(g_defaults.video_filter_dir)); strlcpy(g_defaults.content_history_dir, - path, sizeof(g_defaults.content_history_dir)); + app_dir, sizeof(g_defaults.content_history_dir)); fill_pathname_join(g_defaults.database_dir, - path, "database/rdb", sizeof(g_defaults.database_dir)); + app_dir, "database/rdb", sizeof(g_defaults.database_dir)); fill_pathname_join(g_defaults.cursor_dir, - path, "database/cursors", sizeof(g_defaults.cursor_dir)); + app_dir, "database/cursors", sizeof(g_defaults.cursor_dir)); fill_pathname_join(g_defaults.cheats_dir, - path, "cheats", sizeof(g_defaults.cheats_dir)); + app_dir, "cheats", sizeof(g_defaults.cheats_dir)); fill_pathname_join(g_defaults.playlist_dir, - path, "playlists", sizeof(g_defaults.playlist_dir)); + app_dir, "playlists", sizeof(g_defaults.playlist_dir)); fill_pathname_join(g_defaults.remap_dir, - path, "remaps", sizeof(g_defaults.remap_dir)); + app_dir, "remaps", sizeof(g_defaults.remap_dir)); fill_pathname_join(g_defaults.wallpapers_dir, - path, "wallpapers", sizeof(g_defaults.wallpapers_dir)); - fill_pathname_join(g_defaults.core_assets_dir, - path, "downloads", sizeof(g_defaults.core_assets_dir)); - fill_pathname_join(g_defaults.screenshot_dir, - path, "screenshots", sizeof(g_defaults.screenshot_dir)); + app_dir, "wallpapers", sizeof(g_defaults.wallpapers_dir)); + if(*downloads_dir) + { + fill_pathname_join(g_defaults.core_assets_dir, + downloads_dir, "", sizeof(g_defaults.core_assets_dir)); + } + else + { + fill_pathname_join(g_defaults.core_assets_dir, + app_dir, "downloads", sizeof(g_defaults.core_assets_dir)); + } + if(*screenshot_dir) + { + fill_pathname_join(g_defaults.screenshot_dir, + screenshot_dir, "", sizeof(g_defaults.screenshot_dir)); + } + else + { + fill_pathname_join(g_defaults.screenshot_dir, + app_dir, "screenshots", sizeof(g_defaults.screenshot_dir)); + } } } } @@ -794,7 +880,9 @@ static int frontend_android_parse_drive_list(void *data) file_list_t *list = (file_list_t*)data; menu_list_push(list, - "/data/data/com.retroarch/", "", MENU_FILE_DIRECTORY, 0, 0); + app_dir, "Application Dir", MENU_FILE_DIRECTORY, 0, 0); + menu_list_push(list, + sdcard_dir, "Internal Memory", MENU_FILE_DIRECTORY, 0, 0); menu_list_push(list, "/", "", MENU_FILE_DIRECTORY, 0, 0); diff --git a/frontend/drivers/platform_android.h b/frontend/drivers/platform_android.h index 64e9003bcd..ca70f4adda 100644 --- a/frontend/drivers/platform_android.h +++ b/frontend/drivers/platform_android.h @@ -57,6 +57,9 @@ struct android_app jmethodID getPendingIntentLibretroPath; jmethodID getPendingIntentFullPath; jmethodID getPendingIntentIME; + jmethodID getPendingIntentStorageLocation; + jmethodID getPendingIntentDownloadsLocation; + jmethodID getPendingIntentScreenshotsLocation; }; enum