From 56674fb7f01903edc9ec72d2b1578ea08ac900f3 Mon Sep 17 00:00:00 2001 From: zevektor Date: Mon, 19 Aug 2013 23:23:39 +0200 Subject: [PATCH] Allow to load roms from external apps. --- .project | 11 + android/phoenix/AndroidManifest.xml | 4 +- .../retroarch/browser/MainMenuActivity.java | 203 ++++++++++-------- 3 files changed, 129 insertions(+), 89 deletions(-) create mode 100644 .project diff --git a/.project b/.project new file mode 100644 index 0000000000..871dee54b0 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + RetroArch_ + + + + + + + + diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index 73af32ec05..c44b3a1e1e 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -19,7 +19,7 @@ - + @@ -42,7 +42,7 @@ - + diff --git a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java index 45d1f6be74..35fe1c56b9 100644 --- a/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java +++ b/android/phoenix/src/org/retroarch/browser/MainMenuActivity.java @@ -36,6 +36,13 @@ public class MainMenuActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Intent startedByIntent = getIntent(); + if (null != startedByIntent.getStringExtra("ROM") + && null != startedByIntent.getStringExtra("LIBRETRO")) { + loadRomExternal(startedByIntent.getStringExtra("ROM"), + startedByIntent.getStringExtra("LIBRETRO")); + return; + } instance = this; addPreferencesFromResource(R.xml.prefs); PreferenceManager.setDefaultValues(this, R.xml.prefs, false); @@ -45,7 +52,7 @@ public class MainMenuActivity extends PreferenceActivity { .getDefaultSharedPreferences(getBaseContext()); extractAssets(); - + if (!prefs.getBoolean("first_time_refreshrate_calculate", false)) { prefs.edit().putBoolean("first_time_refreshrate_calculate", true) .commit(); @@ -71,17 +78,16 @@ public class MainMenuActivity extends PreferenceActivity { alert.show(); } } - + if (prefs.getString("libretro_path", "").isEmpty() == false) { libretro_path = prefs.getString("libretro_path", ""); setCoreTitle("No core"); - + if (prefs.getString("libretro_name", "").isEmpty() == false) { libretro_name = prefs.getString("libretro_name", "No core"); setCoreTitle(libretro_name); } - } - else { + } else { libretro_path = MainMenuActivity.getInstance().getApplicationInfo().nativeLibraryDir; libretro_name = "No core"; setCoreTitle("No core"); @@ -168,21 +174,24 @@ public class MainMenuActivity extends PreferenceActivity { public static String getDefaultConfigPath() { String internal = System.getenv("INTERNAL_STORAGE"); String external = System.getenv("EXTERNAL_STORAGE"); - + SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(MainMenuActivity.getInstance() .getBaseContext()); - - boolean global_config_enable = prefs.getBoolean("global_config_enable", true); - boolean config_same_as_native_lib_dir = libretro_path.equals(MainMenuActivity.getInstance().getApplicationInfo().nativeLibraryDir); + + boolean global_config_enable = prefs.getBoolean("global_config_enable", + true); + boolean config_same_as_native_lib_dir = libretro_path + .equals(MainMenuActivity.getInstance().getApplicationInfo().nativeLibraryDir); String append_path; if (!global_config_enable && (config_same_as_native_lib_dir == false)) { - String sanitized_name = libretro_path.substring(libretro_path.lastIndexOf("/")+1,libretro_path.lastIndexOf(".")); + String sanitized_name = libretro_path.substring( + libretro_path.lastIndexOf("/") + 1, + libretro_path.lastIndexOf(".")); sanitized_name = sanitized_name.replace("neon", ""); - sanitized_name = sanitized_name.replace("libretro_",""); + sanitized_name = sanitized_name.replace("libretro_", ""); append_path = File.separator + sanitized_name + "retroarch.cfg"; - } - else { + } else { append_path = File.separator + "retroarch.cfg"; } @@ -200,13 +209,10 @@ public class MainMenuActivity extends PreferenceActivity { return confPath; } - if (internal != null - && new File(internal + append_path) - .canWrite()) + if (internal != null && new File(internal + append_path).canWrite()) return internal + append_path; else if (external != null - && new File(internal + append_path) - .canWrite()) + && new File(internal + append_path).canWrite()) return external + append_path; else if ((MainMenuActivity.getInstance().getApplicationInfo().dataDir) != null) return (MainMenuActivity.getInstance().getApplicationInfo().dataDir) @@ -227,11 +233,11 @@ public class MainMenuActivity extends PreferenceActivity { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(MainMenuActivity.getInstance() .getBaseContext()); - + config.setString("libretro_path", libretro_path); config.setString("libretro_name", libretro_name); setCoreTitle(libretro_name); - + config.setString("rgui_browser_directory", prefs.getString("rgui_browser_directory", "")); config.setBoolean("global_config_enable", @@ -333,8 +339,9 @@ public class MainMenuActivity extends PreferenceActivity { config.setBoolean("video_font_enable", prefs.getBoolean("video_font_enable", true)); - - config.setString("game_history_path", MainMenuActivity.getInstance().getApplicationInfo().dataDir + "/retroarch-history.txt"); + + config.setString("game_history_path", MainMenuActivity.getInstance() + .getApplicationInfo().dataDir + "/retroarch-history.txt"); for (int i = 1; i <= 4; i++) { final String btns[] = { "up", "down", "left", "right", "a", "b", @@ -390,20 +397,20 @@ public class MainMenuActivity extends PreferenceActivity { writer.close(); } } - + private int getVersionCode() { int version = 0; try { version = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; } catch (NameNotFoundException e) { } - + return version; } - + private boolean areAssetsExtracted() { int version = getVersionCode(); - + try { String dataDir = getApplicationInfo().dataDir; File cacheVersion = new File(dataDir, ".cacheversion"); @@ -428,10 +435,10 @@ public class MainMenuActivity extends PreferenceActivity { Log.e(TAG, "Failed to extract assets to cache."); return false; } - + return false; } - + private void extractAssetsThread() { try { AssetManager assets = getAssets(); @@ -465,13 +472,13 @@ public class MainMenuActivity extends PreferenceActivity { private void extractAssets() { if (areAssetsExtracted()) return; - + final Dialog dialog = new Dialog(this); final Handler handler = new Handler(); dialog.setContentView(R.layout.assets); dialog.setCancelable(false); dialog.setTitle("Asset extraction"); - + // Java is fun :) Thread assetsThread = new Thread(new Runnable() { public void run() { @@ -484,36 +491,37 @@ public class MainMenuActivity extends PreferenceActivity { } }); assetsThread.start(); - + dialog.show(); } - + public void setModule(String core_path, String core_name) { - libretro_path = core_path; - libretro_name = core_name; + libretro_path = core_path; + libretro_name = core_name; File libretro_path_file = new File(core_path); - setCoreTitle((libretro_path_file.isDirectory() == true) ? "No core" : core_name); - + setCoreTitle((libretro_path_file.isDirectory() == true) ? "No core" + : core_name); + SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); - SharedPreferences.Editor edit = prefs - .edit(); + SharedPreferences.Editor edit = prefs.edit(); edit.putString("libretro_path", libretro_path); edit.putString("libretro_name", libretro_name); edit.commit(); } - + public void setCoreTitle(String core_name) { setTitle("RetroArch : " + core_name); } boolean detectDevice(boolean show_dialog) { boolean retval = false; - - boolean mentionPlayStore = !android.os.Build.MODEL.equals("OUYA Console"); - final String message = "The ideal configuration options for your device will now be preconfigured.\n\nNOTE: For optimal performance, turn off Google Account sync, " + - (mentionPlayStore ? "Google Play Store auto-updates, " : "") + - "GPS and Wi-Fi in your Android settings menu."; + + boolean mentionPlayStore = !android.os.Build.MODEL + .equals("OUYA Console"); + final String message = "The ideal configuration options for your device will now be preconfigured.\n\nNOTE: For optimal performance, turn off Google Account sync, " + + (mentionPlayStore ? "Google Play Store auto-updates, " : "") + + "GPS and Wi-Fi in your Android settings menu."; Log.i("Device MODEL", android.os.Build.MODEL); if (android.os.Build.MODEL.equals("SHIELD")) { @@ -542,27 +550,27 @@ public class MainMenuActivity extends PreferenceActivity { retval = true; } else if (android.os.Build.MODEL.equals("GAMEMID_BT")) { AlertDialog.Builder alert = new AlertDialog.Builder(this) - .setTitle("GameMID detected") - .setMessage(message) - .setPositiveButton("OK", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, - int which) { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(getBaseContext()); - SharedPreferences.Editor edit = prefs - .edit(); - edit.putBoolean("input_overlay_enable", - false); - edit.putBoolean("input_autodetect_enable", - true); - edit.putBoolean("audio_high_latency", true); - edit.commit(); - } - }); - alert.show(); - retval = true; + .setTitle("GameMID detected") + .setMessage(message) + .setPositiveButton("OK", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(getBaseContext()); + SharedPreferences.Editor edit = prefs + .edit(); + edit.putBoolean("input_overlay_enable", + false); + edit.putBoolean("input_autodetect_enable", + true); + edit.putBoolean("audio_high_latency", true); + edit.commit(); + } + }); + alert.show(); + retval = true; } else if (android.os.Build.MODEL.equals("OUYA Console")) { AlertDialog.Builder alert = new AlertDialog.Builder(this) .setTitle("OUYA detected") @@ -621,30 +629,33 @@ public class MainMenuActivity extends PreferenceActivity { protected void onStart() { super.onStart(); } - - @Override - public void startActivity(Intent intent) { - if (intent.getComponent().getClassName().equals("org.retroarch.browser.ROMActivity")) { - if (new File(libretro_path).isDirectory() == false) { - super.startActivityForResult(intent, ACTIVITY_LOAD_ROM); - } else { + + @Override + public void startActivity(Intent intent) { + if (intent.getComponent().getClassName() + .equals("org.retroarch.browser.ROMActivity")) { + if (new File(libretro_path).isDirectory() == false) { + super.startActivityForResult(intent, ACTIVITY_LOAD_ROM); + } else { Toast.makeText(this, "Go to 'Load Core' and select a core first.", Toast.LENGTH_SHORT).show(); - } - } else { - super.startActivity(intent); - } - } + } + } else { + super.startActivity(intent); + } + } - @Override - protected void onActivityResult(int reqCode, int resCode, Intent data) { - if (reqCode == ACTIVITY_LOAD_ROM) { - if (data.getStringExtra("PATH") != null) { - updateConfigFile(); - Intent myIntent; - String current_ime = Settings.Secure.getString(getContentResolver(), - Settings.Secure.DEFAULT_INPUT_METHOD); + @Override + protected void onActivityResult(int reqCode, int resCode, Intent data) { + switch (reqCode) { + case ACTIVITY_LOAD_ROM: { + if (data.getStringExtra("PATH") != null) { + updateConfigFile(); + Intent myIntent; + String current_ime = Settings.Secure.getString( + getContentResolver(), + Settings.Secure.DEFAULT_INPUT_METHOD); Toast.makeText(this, "Loading: [" + data.getStringExtra("PATH") + "]...", Toast.LENGTH_SHORT).show(); @@ -656,6 +667,24 @@ public class MainMenuActivity extends PreferenceActivity { myIntent.putExtra("IME", current_ime); startActivity(myIntent); } - } - } + } + break; + } + } + + private void loadRomExternal(String rom, String core) { + + updateConfigFile(); + Intent myIntent = new Intent(this, RetroActivity.class); + String current_ime = Settings.Secure.getString(getContentResolver(), + Settings.Secure.DEFAULT_INPUT_METHOD); + Toast.makeText(this, "Loading: [" + rom + "]...", Toast.LENGTH_SHORT) + .show(); + myIntent.putExtra("ROM", rom); + myIntent.putExtra("LIBRETRO", core); + myIntent.putExtra("CONFIGFILE", MainMenuActivity.getDefaultConfigPath()); + myIntent.putExtra("IME", current_ime); + startActivity(myIntent); + + } }