From 94cd38f628c2a599a879b152cb5151e49b795c46 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 13 Jun 2014 03:52:17 +0200 Subject: [PATCH] (Android) Sets default savedir/savestate/system directory paths now to internal sandboxed app dir (Android 4.4.2 and so on no longer allow writing to SD card) --- .../retroarch/browser/HistorySelection.java | 1 + .../DetectCoreDirectoryFragment.java | 1 + .../browser/mainmenu/MainMenuFragment.java | 2 ++ .../preferences/util/UserPreferences.java | 18 +++++++---- frontend/platform/platform_android.c | 30 +++++++++++++++++-- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/android/phoenix/src/com/retroarch/browser/HistorySelection.java b/android/phoenix/src/com/retroarch/browser/HistorySelection.java index 7726bb82c7..15b4cbd56a 100644 --- a/android/phoenix/src/com/retroarch/browser/HistorySelection.java +++ b/android/phoenix/src/com/retroarch/browser/HistorySelection.java @@ -128,6 +128,7 @@ public final class HistorySelection extends DialogFragment retro.putExtra("LIBRETRO", corePath); retro.putExtra("CONFIGFILE", UserPreferences.getDefaultConfigPath(ctx)); retro.putExtra("IME", current_ime); + retro.putExtra("DATADIR", getActivity().getApplicationInfo().dataDir); startActivity(retro); dismiss(); } diff --git a/android/phoenix/src/com/retroarch/browser/dirfragment/DetectCoreDirectoryFragment.java b/android/phoenix/src/com/retroarch/browser/dirfragment/DetectCoreDirectoryFragment.java index cc5ed3b7ab..5e7de64333 100644 --- a/android/phoenix/src/com/retroarch/browser/dirfragment/DetectCoreDirectoryFragment.java +++ b/android/phoenix/src/com/retroarch/browser/dirfragment/DetectCoreDirectoryFragment.java @@ -280,6 +280,7 @@ public final class DetectCoreDirectoryFragment extends DirectoryFragment retro.putExtra("LIBRETRO", corePath); retro.putExtra("CONFIGFILE", UserPreferences.getDefaultConfigPath(getActivity())); retro.putExtra("IME", current_ime); + retro.putExtra("DATADIR", getActivity().getApplicationInfo().dataDir); startActivity(retro); dismiss(); } diff --git a/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java b/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java index fca3c1c077..14ad3aa344 100644 --- a/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java +++ b/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuFragment.java @@ -217,6 +217,7 @@ public final class MainMenuFragment extends PreferenceListFragment implements On retro.putExtra("LIBRETRO", libretro_path); retro.putExtra("CONFIGFILE", UserPreferences.getDefaultConfigPath(ctx)); retro.putExtra("IME", current_ime); + retro.putExtra("DATADIR", ctx.getApplicationInfo().dataDir); startActivity(retro); } // Load Core Preference @@ -290,6 +291,7 @@ public final class MainMenuFragment extends PreferenceListFragment implements On retro.putExtra("LIBRETRO", libretro_path); retro.putExtra("CONFIGFILE", UserPreferences.getDefaultConfigPath(ctx)); retro.putExtra("IME", current_ime); + retro.putExtra("DATADIR", ctx.getApplicationInfo().dataDir); startActivity(retro); } } diff --git a/android/phoenix/src/com/retroarch/browser/preferences/util/UserPreferences.java b/android/phoenix/src/com/retroarch/browser/preferences/util/UserPreferences.java index d17dc3922f..070ac1a467 100644 --- a/android/phoenix/src/com/retroarch/browser/preferences/util/UserPreferences.java +++ b/android/phoenix/src/com/retroarch/browser/preferences/util/UserPreferences.java @@ -220,12 +220,18 @@ public final class UserPreferences config.setBoolean("input_overlay_enable", prefs.getBoolean("input_overlay_enable", false)); config.setString("input_overlay", prefs.getString("input_overlay", "")); - final boolean usingCustomSaveFileDir = prefs.getBoolean("savefile_directory_enable", false); - final boolean usingCustomSaveStateDir = prefs.getBoolean("savestate_directory_enable", false); - final boolean usingCustomSystemDir = prefs.getBoolean("system_directory_enable", false); - config.setString("savefile_directory", usingCustomSaveFileDir ? prefs.getString("savefile_directory", "") : ""); - config.setString("savestate_directory", usingCustomSaveStateDir ? prefs.getString("savestate_directory", "") : ""); - config.setString("system_directory", usingCustomSystemDir ? prefs.getString("system_directory", "") : ""); + if (prefs.getBoolean("savefile_directory_enable", false)) + { + config.setString("savefile_directory", prefs.getString("savefile_directory", "")); + } + if (prefs.getBoolean("savestate_directory_enable", false)) + { + config.setString("savestate_directory", prefs.getString("savestate_directory", "")); + } + if (prefs.getBoolean("system_directory_enable", false)) + { + config.setString("system_directory", prefs.getString("system_directory", "")); + } config.setBoolean("video_font_enable", prefs.getBoolean("video_font_enable", true)); config.setString("game_history_path", dataDir + "/retroarch-history.txt"); diff --git a/frontend/platform/platform_android.c b/frontend/platform/platform_android.c index 92d047c0d0..23de8d481b 100644 --- a/frontend/platform/platform_android.c +++ b/frontend/platform/platform_android.c @@ -460,7 +460,7 @@ static void frontend_android_get_environment_settings(int *argc, char *argv[], RARCH_LOG("Config file: [%s].\n", config_path); if (args && *config_path) - args->config_path = config_path; + args->config_path = strdup(config_path); } // Current IME @@ -497,7 +497,7 @@ static void frontend_android_get_environment_settings(int *argc, char *argv[], RARCH_LOG("Libretro path: [%s].\n", core_path); if (args && *core_path) - args->libretro_path = core_path; + args->libretro_path = strdup(core_path); } // Content @@ -516,7 +516,31 @@ static void frontend_android_get_environment_settings(int *argc, char *argv[], { RARCH_LOG("Auto-start game %s.\n", path); if (args && *path) - args->rom_path = path; + args->rom_path = strdup(path); + } + } + + // Content + CALL_OBJ_METHOD_PARAM(env, jstr, obj, android_app->getStringExtra, (*env)->NewStringUTF(env, "DATADIR")); + + *path = '\0'; + if (android_app->getStringExtra && jstr) + { + const char *argv = (*env)->GetStringUTFChars(env, jstr, 0); + + if (*argv && *argv) + strlcpy(path, argv, sizeof(path)); + (*env)->ReleaseStringUTFChars(env, jstr, argv); + + if (*path) + { + RARCH_LOG("Data path: [%s].\n", path); + if (args && *path) + { + fill_pathname_join(g_defaults.savestate_dir, path, "savestates", sizeof(g_defaults.savestate_dir)); + fill_pathname_join(g_defaults.sram_dir, path, "savefiles", sizeof(g_defaults.sram_dir)); + fill_pathname_join(g_defaults.system_dir, path, "system", sizeof(g_defaults.system_dir)); + } } }