From b823983199e6cb09fb2f0335f49b90ba0ca95bd3 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 12 Aug 2013 21:22:20 -0400 Subject: [PATCH 01/11] [Android] Multi-language support (or at least the basic foundation of it). Added an example translation (Japanese). So now the Android version can both display in English and Japanese, depending on what the Android device's system language is set to. Also did a tiny clean-up of InputConfigItem.java so that the parameters are slightly more descriptive. Now, to do a translation in [x] language, all you have to do is take the normal English strings.xml and translate the XML entries into said language, and simply make a folder in the /res/ sub-directory in the form of values-[region code]. IE) With the Japanese translation, it is in the folder /res/values-ja No configuration other than that is needed. After doing the above, the language should load fine on any device when set to that specific system language. By default, if a translation file does not exist for a given system language. The app will automatically fall back to using the English translation. This *should* be bug-free since I did check everything multiple times. But if any issues occur, please report them so that I can fix them. --- Source/Android/res/layout/prefs.xml | 16 ++-- Source/Android/res/values-ja/strings.xml | 83 +++++++++++++++++++ Source/Android/res/values/strings.xml | 75 +++++++++++++++++ .../dolphinemu/dolphinemu/AboutFragment.java | 7 +- .../dolphinemu/DolphinEmulator.java | 2 +- .../dolphinemu/dolphinemu/FolderBrowser.java | 16 ++-- .../dolphinemu/GameListActivity.java | 18 ++-- .../dolphinemu/GameListFragment.java | 6 +- .../dolphinemu/InputConfigFragment.java | 56 +++++++------ .../dolphinemu/InputConfigItem.java | 20 ++--- .../dolphinemu/dolphinemu/PrefsFragment.java | 22 ++--- 11 files changed, 244 insertions(+), 77 deletions(-) create mode 100644 Source/Android/res/values-ja/strings.xml diff --git a/Source/Android/res/layout/prefs.xml b/Source/Android/res/layout/prefs.xml index 34700f56b7..d8d8664a97 100644 --- a/Source/Android/res/layout/prefs.xml +++ b/Source/Android/res/layout/prefs.xml @@ -2,23 +2,23 @@ + android:summary="@string/on_off" + android:title="@string/dual_core" /> + android:summary="@string/video_backend_to_use" + android:title="@string/video_backend" /> \ No newline at end of file diff --git a/Source/Android/res/values-ja/strings.xml b/Source/Android/res/values-ja/strings.xml new file mode 100644 index 0000000000..329d464ccb --- /dev/null +++ b/Source/Android/res/values-ja/strings.xml @@ -0,0 +1,83 @@ + + + + + Dolphin Emulator + + + ナビゲーションウィンドウを開く + ナビゲーションウィンドウを閉じる + + + ビルドのバージョン: + サポートのOpenGL ES 3: + + + 現在のディレクトリ: + 親ディレクトリ + フォルダ + ファイルサイズ: + 圧縮ファイル形式はサポートされていません + + + ゲームリスト + フォルダの参照 + 設定 + ゲームパッド設定 + について + ファイルブラウザのロード + 設定のロード + ゲームパッド設定のロード + メニューについてのロード + + + クリックされたファイル: + + + 画面上のコントロールを描画 + Aボタン + Bボタン + スタートボタン + Xボタン + Yボタン + Zボタン + D-Pad: ↑ + D-Pad: ↓ + D-Pad: ← + D-Pad: → + コントロールスティック: ↑ + コントロールスティック: ↓ + コントロールスティック: ← + コントロールスティック: → + C-スティック: ↑ + C-スティック: ↓ + C-スティック: ← + C-スティック: → + 左のトリガー + 右のトリガー + + コントロールは画面上に描画されていない + コントロールは画面上に描画されています + %1$sを設定するにはボタンを押して + + + Interpreter + JIT64 Recompiler + JITIL Recompiler + JIT ARM Recompiler + CPUコア + CPU設定 + 使用するエミュレーションコア + デュアルコア + 有効/無効 + + ビデオ設定 + Software Renderer + ビデオレンダラ + 使用するビデオレンダラー + + + はい + いいえ + + diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml index 40a14e3b4e..ea1e02297a 100644 --- a/Source/Android/res/values/strings.xml +++ b/Source/Android/res/values/strings.xml @@ -1,8 +1,83 @@ + Dolphin Emulator + + Open navigation drawer Close navigation drawer + + + Build Revision: + Supports OpenGL ES 3: + + + Current Dir: + Parent Directory + Folder + File Size: + Can not use compressed file types + + + Game List + Browse Folder + Settings + Gamepad Config + About + Loading up the browser + Loading up settings + Loading up gamepad config + Loading about menu + + + File clicked: + + + Draw on-screen controls + Button A + Button B + Button Start + Button X + Button Y + Button Z + D-Pad Up + D-Pad Down + D-Pad Left + D-Pad Right + Main Stick Up + Main Stick Down + Main Stick Left + Main Stick Right + C Stick Up + C Stick Down + C Stick Left + C Stick Right + Trigger L + Trigger R + + Not drawing on-screen controls + Drawing on-screen controls + Press button to configure %1$s + + + Interpreter + JIT64 Recompiler + JITIL Recompiler + JIT ARM Recompiler + CPU Core + CPU Settings + Emulation core to use + Dual Core + On/Off + + Video Settings + Software Renderer + Video Backend + Video backend to use + + + Yes + No diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java index 906736b039..4a7b636ed6 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java @@ -35,10 +35,13 @@ public class AboutFragment extends Fragment { Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.gamelist_listview, container, false); mMainList = (ListView) rootView.findViewById(R.id.gamelist); + + String yes = getString(R.string.yes); + String no = getString(R.string.no); List Input = new ArrayList(); - Input.add(new GameListItem(m_activity, "Build Revision", NativeLibrary.GetVersionString(), "", true)); - Input.add(new GameListItem(m_activity, "Supports OpenGL ES 3", PrefsFragment.SupportsGLES3() ? "Yes" : "No", "", true)); + Input.add(new GameListItem(m_activity, getString(R.string.build_revision), NativeLibrary.GetVersionString(), "", true)); + Input.add(new GameListItem(m_activity, getString(R.string.supports_gles3), PrefsFragment.SupportsGLES3() ? yes : no, "", true)); adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, Input); mMainList.setAdapter(adapter); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index 6cad8cb3bd..fefb13ec14 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -38,7 +38,7 @@ public class DolphinEmulator extends Activity out.close(); out = null; } catch(IOException e) { - Log.e("tag", "Failed to copy asset file: " + asset, e); + Log.e("DolphinEmulator", "Failed to copy asset file: " + asset, e); } } diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java index 9094486197..ee96f445ce 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java @@ -24,7 +24,7 @@ public class FolderBrowser extends Fragment { // Populates the FolderView with the given currDir's contents. private void Fill(File currDir) { - m_activity.setTitle("Current Dir: " + currDir.getName()); + m_activity.setTitle(getString(R.string.current_dir) + currDir.getName()); File[] dirs = currDir.listFiles(); Listdir = new ArrayList(); Listfls = new ArrayList(); @@ -44,17 +44,17 @@ public class FolderBrowser extends Fragment { { if(entry.isDirectory()) { - dir.add(new GameListItem(m_activity, entryName,"Folder",entry.getAbsolutePath(), true)); + dir.add(new GameListItem(m_activity, entryName, getString(R.string.folder), entry.getAbsolutePath(), true)); } else { if (validExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true)); + fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } else if (archiveExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), false)); + fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), false)); } } } @@ -70,7 +70,7 @@ public class FolderBrowser extends Fragment { // Check for a parent directory to the one we're currently in. if (!currDir.getPath().equalsIgnoreCase("/")) - dir.add(0, new GameListItem(m_activity, "..", "Parent Directory", currDir.getParent(), true)); + dir.add(0, new GameListItem(m_activity, "..", getString(R.string.parent_directory), currDir.getParent(), true)); adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, dir); mDrawerList = (ListView) rootView.findViewById(R.id.gamelist); @@ -95,16 +95,18 @@ public class FolderBrowser extends Fragment { public void onItemClick(AdapterView parent, View view, int position, long id) { GameListItem o = adapter.getItem(position); - if(o.getData().equalsIgnoreCase("folder") || o.getData().equalsIgnoreCase("parent directory")) + if(o.getData().equalsIgnoreCase(getString(R.string.folder)) || o.getData().equalsIgnoreCase(getString(R.string.parent_directory))) { currentDir = new File(o.getPath()); Fill(currentDir); } else + { if (o.isValid()) FolderSelected(); else - Toast.makeText(m_activity, "Can not use compressed file types.", Toast.LENGTH_LONG).show(); + Toast.makeText(m_activity, getString(R.string.cant_use_compressed_filetypes), Toast.LENGTH_LONG).show(); + } } }; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java index 9a48de4d8b..845bf72bdd 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java @@ -52,11 +52,11 @@ public class GameListActivity extends Activity mDrawerList = (ListView) findViewById(R.id.left_drawer); List dir = new ArrayList(); - dir.add(new SideMenuItem("Game List", 0)); - dir.add(new SideMenuItem("Browse Folder", 1)); - dir.add(new SideMenuItem("Settings", 2)); - dir.add(new SideMenuItem("Gamepad Config", 3)); - dir.add(new SideMenuItem("About", 4)); + dir.add(new SideMenuItem(getString(R.string.game_list), 0)); + dir.add(new SideMenuItem(getString(R.string.browse_folder), 1)); + dir.add(new SideMenuItem(getString(R.string.settings), 2)); + dir.add(new SideMenuItem(getString(R.string.gamepad_config), 3)); + dir.add(new SideMenuItem(getString(R.string.about), 4)); mDrawerAdapter = new SideMenuAdapter(this, R.layout.sidemenu, dir); mDrawerList.setAdapter(mDrawerAdapter); @@ -179,7 +179,7 @@ public class GameListActivity extends Activity break; case 1: { - Toast.makeText(mMe, "Loading up the browser", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_browser), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 1; mCurFragment = new FolderBrowser(); FragmentManager fragmentManager = getFragmentManager(); @@ -188,7 +188,7 @@ public class GameListActivity extends Activity break; case 2: { - Toast.makeText(mMe, "Loading up settings", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_settings), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 2; mCurFragment = new PrefsFragment(); FragmentManager fragmentManager = getFragmentManager(); @@ -197,7 +197,7 @@ public class GameListActivity extends Activity break; case 3: { - Toast.makeText(mMe, "Loading up gamepad config", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_gamepad), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 3; mCurFragment = new InputConfigFragment(); FragmentManager fragmentManager = getFragmentManager(); @@ -206,7 +206,7 @@ public class GameListActivity extends Activity break; case 4: { - Toast.makeText(mMe, "Loading up About", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.about), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 4; mCurFragment = new AboutFragment(); FragmentManager fragmentManager = getFragmentManager(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java index 152c18662b..efcee489a8 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java @@ -63,7 +63,7 @@ public class GameListFragment extends Fragment if(!entry.isDirectory()) { if (exts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) - fls.add(new GameListItem(mMe.getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true)); + fls.add(new GameListItem(mMe.getApplicationContext(), entryName, getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } } } @@ -96,7 +96,7 @@ public class GameListFragment extends Fragment public void onItemClick(AdapterView parent, View view, int position, long id) { GameListItem o = mGameAdapter.getItem(position); - if(!(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory"))) + if(!(o.getData().equalsIgnoreCase(getString(R.string.folder))||o.getData().equalsIgnoreCase(getString(R.string.parent_directory)))) { onFileClick(o.getPath()); } @@ -104,7 +104,7 @@ public class GameListFragment extends Fragment }; private void onFileClick(String o) { - Toast.makeText(mMe, "File Clicked: " + o, Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.file_clicked) + o, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.putExtra("Select", o); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java index 91f550d2a2..b11dc4a34b 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java @@ -47,27 +47,27 @@ public class InputConfigFragment extends Fragment Bundle savedInstanceState) { List Input = new ArrayList(); - Input.add(new InputConfigItem("Draw on-screen controls", "Android-ScreenControls", "True")); - Input.add(new InputConfigItem("Button A", "Android-InputA")); - Input.add(new InputConfigItem("Button B", "Android-InputB")); - Input.add(new InputConfigItem("Button Start", "Android-InputStart")); - Input.add(new InputConfigItem("Button X", "Android-InputX")); - Input.add(new InputConfigItem("Button Y", "Android-InputY")); - Input.add(new InputConfigItem("Button Z", "Android-InputZ")); - Input.add(new InputConfigItem("D-Pad Up", "Android-DPadUp")); - Input.add(new InputConfigItem("D-Pad Down", "Android-DPadDown")); - Input.add(new InputConfigItem("D-Pad Left", "Android-DPadLeft")); - Input.add(new InputConfigItem("D-Pad Right", "Android-DPadRight")); - Input.add(new InputConfigItem("Main Stick Up", "Android-MainUp")); - Input.add(new InputConfigItem("Main Stick Down", "Android-MainDown")); - Input.add(new InputConfigItem("Main Stick Left", "Android-MainLeft")); - Input.add(new InputConfigItem("Main Stick Right", "Android-MainRight")); - Input.add(new InputConfigItem("C Stick Up", "Android-CStickUp")); - Input.add(new InputConfigItem("C Stick Down", "Android-CStickDown")); - Input.add(new InputConfigItem("C Stick Left", "Android-CStickLeft")); - Input.add(new InputConfigItem("C Stick Right", "Android-CStickRight")); - Input.add(new InputConfigItem("Trigger L", "Android-InputL")); - Input.add(new InputConfigItem("Trigger R", "Android-InputR")); + Input.add(new InputConfigItem(getString(R.string.draw_onscreen_controls), "Android-ScreenControls", "True")); + Input.add(new InputConfigItem(getString(R.string.button_a), "Android-InputA")); + Input.add(new InputConfigItem(getString(R.string.button_b), "Android-InputB")); + Input.add(new InputConfigItem(getString(R.string.button_start), "Android-InputStart")); + Input.add(new InputConfigItem(getString(R.string.button_x), "Android-InputX")); + Input.add(new InputConfigItem(getString(R.string.button_y), "Android-InputY")); + Input.add(new InputConfigItem(getString(R.string.button_z), "Android-InputZ")); + Input.add(new InputConfigItem(getString(R.string.dpad_up), "Android-DPadUp")); + Input.add(new InputConfigItem(getString(R.string.dpad_down), "Android-DPadDown")); + Input.add(new InputConfigItem(getString(R.string.dpad_left), "Android-DPadLeft")); + Input.add(new InputConfigItem(getString(R.string.dpad_right), "Android-DPadRight")); + Input.add(new InputConfigItem(getString(R.string.main_stick_up), "Android-MainUp")); + Input.add(new InputConfigItem(getString(R.string.main_stick_down), "Android-MainDown")); + Input.add(new InputConfigItem(getString(R.string.main_stick_left), "Android-MainLeft")); + Input.add(new InputConfigItem(getString(R.string.main_stick_right), "Android-MainRight")); + Input.add(new InputConfigItem(getString(R.string.c_stick_up), "Android-CStickUp")); + Input.add(new InputConfigItem(getString(R.string.c_stick_down), "Android-CStickDown")); + Input.add(new InputConfigItem(getString(R.string.c_stick_left), "Android-CStickLeft")); + Input.add(new InputConfigItem(getString(R.string.c_stick_right), "Android-CStickRight")); + Input.add(new InputConfigItem(getString(R.string.trigger_left), "Android-InputL")); + Input.add(new InputConfigItem(getString(R.string.trigger_right), "Android-InputR")); adapter = new InputConfigAdapter(m_activity, R.layout.folderbrowser, Input); View rootView = inflater.inflate(R.layout.gamelist_listview, container, false); @@ -88,12 +88,12 @@ public class InputConfigFragment extends Fragment String newBind; if (o.getBind().equals("True")) { - Toast.makeText(m_activity, "Not Drawing on screen controls", Toast.LENGTH_SHORT).show(); + Toast.makeText(m_activity, getString(R.string.not_drawing_onscreen_controls), Toast.LENGTH_SHORT).show(); newBind = "False"; } else { - Toast.makeText(m_activity, "Drawing on screen controls", Toast.LENGTH_SHORT).show(); + Toast.makeText(m_activity, getString(R.string.drawing_onscreen_controls), Toast.LENGTH_SHORT).show(); newBind = "True"; } adapter.remove(o); @@ -101,7 +101,8 @@ public class InputConfigFragment extends Fragment adapter.insert(o, position); break; default: // gamepad controls - Toast.makeText(m_activity, "Press button to configure " + o.getName(), Toast.LENGTH_SHORT).show(); + + Toast.makeText(m_activity, getString(R.string.press_button_to_config, o.getName()), Toast.LENGTH_SHORT).show(); configPosition = position; Configuring = true; firstEvent = true; @@ -136,9 +137,12 @@ public class InputConfigFragment extends Fragment if (firstEvent) { m_values.clear(); - for (InputDevice.MotionRange range : motions) { + + for (InputDevice.MotionRange range : motions) + { m_values.add(event.getAxisValue(range.getAxis())); } + firstEvent = false; } else @@ -164,7 +168,7 @@ public class InputConfigFragment extends Fragment } public boolean onKeyEvent(KeyEvent event) { - Log.w("Dolphinemu", "Got Event " + event.getAction()); + Log.w("InputConfigFragment", "Got Event " + event.getAction()); switch (event.getAction()) { case KeyEvent.ACTION_DOWN: case KeyEvent.ACTION_UP: diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java index 7511406dc9..ff8a077703 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java @@ -10,24 +10,24 @@ public class InputConfigItem implements Comparable{ private String m_Config; private String m_bind; - private void Init(String n, String c, String d) + private void Init(String name, String config, String defaultBind) { - m_name = n; - m_Config = c; + m_name = name; + m_Config = config; String ConfigValues[] = m_Config.split("-"); String Key = ConfigValues[0]; String Value = ConfigValues[1]; - m_bind = NativeLibrary.GetConfig("Dolphin.ini", Key, Value, d); + m_bind = NativeLibrary.GetConfig("Dolphin.ini", Key, Value, defaultBind); } - public InputConfigItem(String n, String c, String d) + public InputConfigItem(String name, String config, String defaultBind) { - Init(n, c, d); + Init(name, config, defaultBind); } - public InputConfigItem(String n, String c) + public InputConfigItem(String name, String config) { - Init(n, c, "None"); + Init(name, config, "None"); } public String getName() { @@ -41,9 +41,9 @@ public class InputConfigItem implements Comparable{ { return m_bind; } - public void setBind(String b) + public void setBind(String bind) { - m_bind = b; + m_bind = bind; } public int compareTo(InputConfigItem o) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java index e16b2503c3..e56aeeb479 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java @@ -144,18 +144,18 @@ public class PrefsFragment extends PreferenceFragment { if (Build.CPU_ABI.contains("x86")) { - entries.put("Interpreter", "0"); - entries.put("JIT64 Recompiler", "1"); - entries.put("JITIL Recompiler", "2"); + entries.put(getString(R.string.interpreter), "0"); + entries.put(getString(R.string.jit64_recompiler), "1"); + entries.put(getString(R.string.jitil_recompiler), "2"); } else if (Build.CPU_ABI.contains("arm")) { - entries.put("Interpreter", "0"); - entries.put("JIT ARM Recompiler", "3"); + entries.put(getString(R.string.interpreter), "0"); + entries.put(getString(R.string.jit_arm_recompiler), "3"); } else { - entries.put("Interpreter", "0"); + entries.put(getString(R.string.interpreter), "0"); } // Convert the key/value sections to arrays respectively so the list can be set. @@ -163,8 +163,8 @@ public class PrefsFragment extends PreferenceFragment { etp.setEntries(entries.keySet().toArray(new CharSequence[entries.size()])); etp.setEntryValues(entries.values().toArray(new CharSequence[entries.size()])); etp.setKey("cpupref"); - etp.setTitle("CPU Core"); - etp.setSummary("Emulation core to use"); + etp.setTitle(getString(R.string.cpu_core)); + etp.setSummary(getString(R.string.emu_core_to_use)); PreferenceCategory mCategory = (PreferenceCategory) findPreference("cpuprefcat"); mCategory.addPreference(etp); @@ -181,11 +181,11 @@ public class PrefsFragment extends PreferenceFragment { // Add available graphics renderers to the hashmap to add to the list. entries.clear(); - entries.put("Software Renderer", "Software Renderer"); // TODO: I think this is a bug? The value shouldn't be the same as the key? + entries.put(getString(R.string.software_renderer), "Software Renderer"); videobackend.setKey("gpupref"); - videobackend.setTitle("Video Backend"); - videobackend.setSummary("Video backend to use"); + videobackend.setTitle(getString(R.string.video_backend)); + videobackend.setSummary(getString(R.string.video_backend_to_use)); videobackend.setEntries(entries.keySet().toArray(new CharSequence[entries.size()])); videobackend.setEntryValues(entries.values().toArray(new CharSequence[entries.size()])); From 2d7244f6d51b6cdecd6d4dc14ae6a6786b883d58 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 08:50:21 -0400 Subject: [PATCH 02/11] [Android] Change the name of a variable in FolderBrowser.java to better reflect its purpose Compressed file formats are not valid, so it's best to rename this to invalidExts. --- .../Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java index ee96f445ce..817a9152c5 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java @@ -31,7 +31,7 @@ public class FolderBrowser extends Fragment { // Supported extensions to filter by Set validExts = new HashSet(Arrays.asList(".gcm", ".iso", ".wbfs", ".gcz", ".dol", ".elf", ".dff")); - Set archiveExts = new HashSet(Arrays.asList(".zip", ".rar", ".7z")); + Set invalidExts = new HashSet(Arrays.asList(".zip", ".rar", ".7z")); // Search for any directories or supported files within the current dir. try @@ -52,7 +52,7 @@ public class FolderBrowser extends Fragment { { fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } - else if (archiveExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) + else if (invalidExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), false)); } From e3617a55a01d05a7dde37dfc37e662bfd91f42de Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 08:58:50 -0400 Subject: [PATCH 03/11] [Android] Clean up the function CopyAsset in DolphinEmulator.java. [streamtype].flush() is called when [streamtype].close() is called. No need to null the references either after calling close(), the garbage collection will take care of it. --- .../src/org/dolphinemu/dolphinemu/DolphinEmulator.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index fefb13ec14..cf2ad33e4f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -33,10 +33,7 @@ public class DolphinEmulator extends Activity out = new FileOutputStream(output); copyFile(in, out); in.close(); - in = null; - out.flush(); out.close(); - out = null; } catch(IOException e) { Log.e("DolphinEmulator", "Failed to copy asset file: " + asset, e); } @@ -78,7 +75,6 @@ public class DolphinEmulator extends Activity super.onCreate(savedInstanceState); if (savedInstanceState == null) { - Intent ListIntent = new Intent(this, GameListActivity.class); startActivityForResult(ListIntent, 1); From 0916d0797c0d6e2da6e9b59f2ac92cfc99b569c4 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 09:13:46 -0400 Subject: [PATCH 04/11] Simplify asset copying code a little bit in DolphinEmulator.java Since the directories are already cached (with smaller variable names), use these instead so we can shorten the length of each line. --- .../dolphinemu/DolphinEmulator.java | 44 +++++-------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index cf2ad33e4f..40e5b6e98a 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -92,41 +92,19 @@ public class DolphinEmulator extends Activity directory.mkdirs(); // Copy assets if needed - java.io.File file = new java.io.File( - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "GC" + File.separator + "dsp_coef.bin"); + File file = new File(GCDir + File.separator + "dsp_coef.bin"); if(!file.exists()) { - CopyAsset("ButtonA.png", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "ButtonA.png"); - CopyAsset("ButtonB.png", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "ButtonB.png"); - CopyAsset("ButtonStart.png", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "ButtonStart.png"); - CopyAsset("NoBanner.png", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "NoBanner.png"); - CopyAsset("GCPadNew.ini", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "Config" + File.separator + "GCPadNew.ini"); - CopyAsset("Dolphin.ini", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "Config" + File.separator + "Dolphin.ini"); - CopyAsset("dsp_coef.bin", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "GC" + File.separator + "dsp_coef.bin"); - CopyAsset("dsp_rom.bin", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "GC" + File.separator + "dsp_rom.bin"); - CopyAsset("font_ansi.bin", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "GC" + File.separator + "font_ansi.bin"); - CopyAsset("font_sjis.bin", - Environment.getExternalStorageDirectory()+File.separator+ - "dolphin-emu" + File.separator + "GC" + File.separator + "font_sjis.bin"); + CopyAsset("ButtonA.png", BaseDir + File.separator + "ButtonA.png"); + CopyAsset("ButtonB.png", BaseDir + File.separator + "ButtonB.png"); + CopyAsset("ButtonStart.png", BaseDir + File.separator + "ButtonStart.png"); + CopyAsset("NoBanner.png", BaseDir + File.separator + "NoBanner.png"); + CopyAsset("GCPadNew.ini", ConfigDir + File.separator + "GCPadNew.ini"); + CopyAsset("Dolphin.ini", ConfigDir + File.separator + "Dolphin.ini"); + CopyAsset("dsp_coef.bin", GCDir + File.separator + "dsp_coef.bin"); + CopyAsset("dsp_rom.bin", GCDir + File.separator + "dsp_rom.bin"); + CopyAsset("font_ansi.bin", GCDir + File.separator + "font_ansi.bin"); + CopyAsset("font_sjis.bin", GCDir + File.separator + "font_sjis.bin"); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); From 2015484c24b817b9980d0f59e0cde1a4435cc789 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 09:23:11 -0400 Subject: [PATCH 05/11] [Android] Some tiny cleanups in DolphinEmulator.java - Join variable declaration and assignments in function onTouchEvent() - Change a for-loop into a foreach loop in dispatchGenericMotionEvent(). Makes the loop body a single statement. --- .../dolphinemu/dolphinemu/DolphinEmulator.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index 40e5b6e98a..d4177de5a4 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -143,11 +143,9 @@ public class DolphinEmulator extends Activity @Override public boolean onTouchEvent(MotionEvent event) { - float X, Y; - int Action; - X = event.getX(); - Y = event.getY(); - Action = event.getActionMasked(); + float X = event.getX(); + float Y = event.getY(); + int Action = event.getActionMasked(); // Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0 float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f; @@ -207,14 +205,13 @@ public class DolphinEmulator extends Activity InputDevice input = event.getDevice(); List motions = input.getMotionRanges(); - for (int a = 0; a < motions.size(); ++a) + + for (InputDevice.MotionRange range : motions) { - InputDevice.MotionRange range; - range = motions.get(a); - NativeLibrary.onGamePadMoveEvent(InputConfigFragment.getInputDesc(input), range.getAxis(), event.getAxisValue(range.getAxis())); + NativeLibrary.onGamePadMoveEvent(InputConfigFragment.getInputDesc(input), range.getAxis(), event.getAxisValue(range.getAxis())); } return true; } -} \ No newline at end of file +} \ No newline at end of file From debd5b42cf9ca56a33d76f19b1f6b586f0de697c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 09:48:18 -0400 Subject: [PATCH 06/11] [Android] Clean up function SupportsGLES3 in PrefsFragment.java a little bit. --- .../dolphinemu/dolphinemu/PrefsFragment.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java index e56aeeb479..4f088a58b4 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java @@ -97,33 +97,35 @@ public class PrefsFragment extends PreferenceFragment { } static public boolean SupportsGLES3() { - String m_GLVersion; - String m_GLVendor; - String m_GLRenderer; - VersionCheck mbuffer = new VersionCheck(); - m_GLVersion = mbuffer.getVersion(); - m_GLVendor = mbuffer.getVendor(); - m_GLRenderer = mbuffer.getRenderer(); + String m_GLVersion = mbuffer.getVersion(); + String m_GLVendor = mbuffer.getVendor(); + String m_GLRenderer = mbuffer.getRenderer(); boolean mSupportsGLES3 = false; - if (m_GLVersion.contains("OpenGL ES 3.0") || - m_GLVersion.equals("OpenGL ES 3.0")) // 3.0 support + // Check for OpenGL ES 3 support (General case). + if (m_GLVersion.contains("OpenGL ES 3.0") || m_GLVersion.equals("OpenGL ES 3.0")) mSupportsGLES3 = true; + + // Checking for OpenGL ES 3 support for certain Qualcomm devices. if (!mSupportsGLES3 && m_GLVendor.equals("Qualcomm")) { if (m_GLRenderer.contains("Adreno (TM) 3")) { - int mVStart, mVEnd = 0; + int mVStart = m_GLVersion.indexOf("V@") + 2; + int mVEnd = 0; float mVersion; - mVStart = m_GLVersion.indexOf("V@") + 2; + for (int a = mVStart; a < m_GLVersion.length(); ++a) + { if (m_GLVersion.charAt(a) == ' ') { mVEnd = a; break; } + } + mVersion = Float.parseFloat(m_GLVersion.substring(mVStart, mVEnd)); if (mVersion >= 14.0f) From a8fcd50cd7c58a610169c38032ab3928a3229b82 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 10:09:42 -0400 Subject: [PATCH 07/11] [Android] Integer.toString isn't required in this string declaration. Concatenation handles this. For example: "string" + 1 will just be concatenated as "string1" implicitly. --- .../Android/src/org/dolphinemu/dolphinemu/GameListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java index efcee489a8..8e4d2cb244 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java @@ -49,7 +49,7 @@ public class GameListFragment extends Fragment for (int a = 0; a < intDirectories; ++a) { - String BrowseDir = NativeLibrary.GetConfig("Dolphin.ini", "General", "GCMPath" + Integer.toString(a), ""); + String BrowseDir = NativeLibrary.GetConfig("Dolphin.ini", "General", "GCMPath" + a, ""); File currentDir = new File(BrowseDir); File[]dirs = currentDir.listFiles(); try From 8fbf11a0d9f507f6f4589e5333317697deb986a7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 12:10:42 -0400 Subject: [PATCH 08/11] [Android] Add translatable="false" to the names of the string arrays in prefvalues.xml. --- Source/Android/res/values/prefvalues.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Android/res/values/prefvalues.xml b/Source/Android/res/values/prefvalues.xml index 409666e328..8564801f6f 100644 --- a/Source/Android/res/values/prefvalues.xml +++ b/Source/Android/res/values/prefvalues.xml @@ -1,11 +1,11 @@ - + Software Renderer OpenGL ES 3 - + Software Renderer OGL From 53bf55b1e9047a1065580a4e024fb5a74c5ec94a Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 13:05:42 -0400 Subject: [PATCH 09/11] [Android] Make the file browser look much more nice and user friendly to use. This is what it now looks like: http://i.imgur.com/KOZgA1i.png As usual, if any bugs arise from this rather large change. Please report it so I can fix it. --- .../res/drawable-hdpi/ic_menu_file.png | Bin 0 -> 510 bytes .../res/drawable-hdpi/ic_menu_folder.png | Bin 0 -> 1449 bytes .../res/drawable-mdpi/ic_menu_file.png | Bin 0 -> 487 bytes .../res/drawable-mdpi/ic_menu_folder.png | Bin 0 -> 1312 bytes .../res/drawable-xhdpi/ic_menu_file.png | Bin 0 -> 580 bytes .../res/drawable-xhdpi/ic_menu_folder.png | Bin 0 -> 1617 bytes Source/Android/res/layout/about_layout.xml | 29 +++++ Source/Android/res/layout/folderbrowser.xml | 66 ++++++---- .../dolphinemu/dolphinemu/AboutFragment.java | 9 +- .../dolphinemu/dolphinemu/FolderBrowser.java | 18 +-- .../dolphinemu/FolderBrowserAdapter.java | 67 +++++++---- .../dolphinemu/FolderBrowserItem.java | 113 ++++++++++++++++++ .../dolphinemu/InputConfigItem.java | 48 +++++++- .../dolphinemu/dolphinemu/NativeLibrary.java | 11 +- .../dolphinemu/SideMenuAdapter.java | 48 ++++---- .../dolphinemu/dolphinemu/SideMenuItem.java | 34 +++++- 16 files changed, 346 insertions(+), 97 deletions(-) create mode 100644 Source/Android/res/drawable-hdpi/ic_menu_file.png create mode 100644 Source/Android/res/drawable-hdpi/ic_menu_folder.png create mode 100644 Source/Android/res/drawable-mdpi/ic_menu_file.png create mode 100644 Source/Android/res/drawable-mdpi/ic_menu_folder.png create mode 100644 Source/Android/res/drawable-xhdpi/ic_menu_file.png create mode 100644 Source/Android/res/drawable-xhdpi/ic_menu_folder.png create mode 100644 Source/Android/res/layout/about_layout.xml create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java diff --git a/Source/Android/res/drawable-hdpi/ic_menu_file.png b/Source/Android/res/drawable-hdpi/ic_menu_file.png new file mode 100644 index 0000000000000000000000000000000000000000..f2047409059b819113f6ea6e455408f71a1f8bd0 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKx1<~T^vI)oZsH?^*S6Na`a;#i=(@ig`mswzPl|ij-i&J*KJ5-4(oKg|7q)wH_nmWx5OV+h2Pk~$h;xS zl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi))Y-tz$kfu*$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1O?oUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1@ zG!Lpb1-Dx)aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z{wZbfoq>T#+SA1` zq~g|_8P?v+jv}p_Dp@~=$xgtPq#)P z%r4Ndv#``w+)uE{NA0AVHFxpDW>=w2_s{J7eBq;wzRp!wes$hs@66N9ng*QPnuI#0+5R`O+qGj##Dba! zOkYC;c^Y4C;HsF@TRDMe7yGNV`WLvv4ou{44%&B0Haz<2BPru28GmMcIV|&Wwbj8a zWu{M$?wh{hcAbCuVPVKXBEp6XG=T%rpOPOhc2>jX*QkOaQNc6CcX>&ayM5vPIvh&nzP~? zH)eMwkEtC#j{N=#~#y;ro0 zNp+qJcN@ov+=At|LbpwBe!6MBhq@Ia~A@BM6^rfve8KA<`)78&q Iol`;+00R>g-v9sr literal 0 HcmV?d00001 diff --git a/Source/Android/res/drawable-mdpi/ic_menu_file.png b/Source/Android/res/drawable-mdpi/ic_menu_file.png new file mode 100644 index 0000000000000000000000000000000000000000..dee2577897d33842c1c9677191bf04834c5c5aef GIT binary patch literal 487 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv00042Nkl5QX725b=VkcMwc8 zF%t|GuZW^38X0KdV;U%mrasYl{$U%M=HRR_TMZg~!4`eWn%;4{2TjvdWs8w)F_JAt zvc*WYSXhw74ok8rTe2oAL(4KNu5Zg0GyL&q`H;^JZ$s%b8M4>ndbeyb!_(31OJ3z= zM64x4_D)>ymMvz|05oJvXJozuYgkK$?5()oEnCc_0eC8!yEP7L$^5MW=449F)Tz literal 0 HcmV?d00001 diff --git a/Source/Android/res/drawable-mdpi/ic_menu_folder.png b/Source/Android/res/drawable-mdpi/ic_menu_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..cc81e57f7ecc485edb05d35c1efda39a45bc3e85 GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)%+$!x$j!ji$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OozuV4URX z;uunK>&^7tUd)anZRN!mAFx_S3%=1=v&SUNu5s!Oj;I?y8TK{XHO-BP;NB({7wE$3 zx|T&*siRBaii`0-`#A^FPWT9IcGoR?pzJF4?DqdNmXlkK&3K?6K7&JrNy&ht&Ee$7 z7_m1^vv;r>eX`^db2#`hhCPDWyO4W{QvQvXioDAXG)!Z7{o!fj(wA(Xqf|3eHrfa$ z2;DK=$uGQz$^R=$&y>Y?C*LsAFxR}mnszYFmNBn}H|!w$?ju)i?LDgYPZZkH$Xmen z%tfj1XiB^C@23Z>qOFtnh6>6wXBs@tJRQbw*BbVQr6SJ^xCc3+DXuwCe8_>Voac)5e+g=n8|A-8U8F8KBM zc;A0>)*a`$Eeh_kEAM{!F bu}Uy#vJ`o5dtB`eDziLY{an^LB{Ts5!e_@2 literal 0 HcmV?d00001 diff --git a/Source/Android/res/drawable-xhdpi/ic_menu_file.png b/Source/Android/res/drawable-xhdpi/ic_menu_file.png new file mode 100644 index 0000000000000000000000000000000000000000..85369c338e1ffb721b44f074f4a515c1b25858af GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fyQq3ba4!+h){Dhagyq521M`nKFdMt_Tq$1h{ezyI!@>Oy!Ga?G z3mZE+%%xT*h|OAh=k2k3sk5pMP8ZqySI(4g)0>`M>o%)7s~eRlVIvMRWfyR`i^}>0 zT<IrVzW6TQ}t0$b3 zj$!=su_%i1_XigJ4>1o!*ijrCpKM`q61%M0=-_K*aI?w5c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=osk4Ebk*TSvlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLa!N4y`aR9TL84#CABECEH%ZgC_h&L>}jh^+-@<( zX&zK>3U0TU;MA)Rbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3by?xuI_Y4e7hdo^! zLn>~)ndO@;94OMJe%Uar`<=@hw}bow%w67^D`LaM-%b6;_&x7P{Db;}*XQTz&d|_kn7I#jXxhcG+-ZeKHZl#zn2LfWhEPQq)NyA%4&82@&$Nw7WM$Hg&&_4z@?`K)hPr`L!o z1hPLrV5oaLVgKTzb02c;IQ{x;-`fPSJLj4kQncnUsBh13C~u6Ot*CHok>DFswoQJo zPZZ9LV9j4za&9Ms=40_+x(OUH?B<#a0`3MsnGiHT^1ioB>ftLVikpw$|GPiu-?_H8 zTe}-_6XfaFT_)#c|DCU=X=ql=`>>uvB1Few)eY5m8GcMk%l;|d;O*1!|3ASu=xk`i zoB#Pc!o94kBR(?C(0LYm{d2>TJGIAt3$9x*>-qod^=JQ=F}+&(x4wmKYg@`^lOI!D z511Fse`zmM^1px5o-fwIk+T-gF#W9Y{2yOh%eD4+#^OkpEi=rnM|{g#_wSUAe8h=c zeC8IP8XtX`zVgnKsB5pD**JXOE|Ee?{F4e0Q)VQzgU`k<}Q<8gs zF>kTD&%)9#;lb&WGg(Y_mao&yYj{#QuYA?Ne^G|N|13(8V@atByc{>x6p@NRNowA) bd`32g_eBr8pZZM60u}O}u6{1-oD!M + + + + + + + + + \ No newline at end of file diff --git a/Source/Android/res/layout/folderbrowser.xml b/Source/Android/res/layout/folderbrowser.xml index 82b94e238f..61c6fba1ea 100644 --- a/Source/Android/res/layout/folderbrowser.xml +++ b/Source/Android/res/layout/folderbrowser.xml @@ -1,29 +1,43 @@ - - + android:layout_height="?android:attr/listPreferredItemHeight" + android:padding="3dip"> + + - - - - - - + + + + + diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java index 4a7b636ed6..4905027ae1 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java @@ -22,7 +22,6 @@ public class AboutFragment extends Fragment { private ListView mMainList; private FolderBrowserAdapter adapter; - private int configPosition = 0; boolean Configuring = false; boolean firstEvent = true; @@ -39,11 +38,11 @@ public class AboutFragment extends Fragment { String yes = getString(R.string.yes); String no = getString(R.string.no); - List Input = new ArrayList(); - Input.add(new GameListItem(m_activity, getString(R.string.build_revision), NativeLibrary.GetVersionString(), "", true)); - Input.add(new GameListItem(m_activity, getString(R.string.supports_gles3), PrefsFragment.SupportsGLES3() ? yes : no, "", true)); + List Input = new ArrayList(); + Input.add(new FolderBrowserItem(m_activity, getString(R.string.build_revision), NativeLibrary.GetVersionString(), "", true)); + Input.add(new FolderBrowserItem(m_activity, getString(R.string.supports_gles3), PrefsFragment.SupportsGLES3() ? yes : no, "", true)); - adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, Input); + adapter = new FolderBrowserAdapter(m_activity, R.layout.about_layout, Input); mMainList.setAdapter(adapter); return mMainList; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java index 817a9152c5..aa44ad83ca 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java @@ -26,8 +26,8 @@ public class FolderBrowser extends Fragment { { m_activity.setTitle(getString(R.string.current_dir) + currDir.getName()); File[] dirs = currDir.listFiles(); - Listdir = new ArrayList(); - Listfls = new ArrayList(); + Listdir = new ArrayList(); + Listfls = new ArrayList(); // Supported extensions to filter by Set validExts = new HashSet(Arrays.asList(".gcm", ".iso", ".wbfs", ".gcz", ".dol", ".elf", ".dff")); @@ -44,17 +44,17 @@ public class FolderBrowser extends Fragment { { if(entry.isDirectory()) { - dir.add(new GameListItem(m_activity, entryName, getString(R.string.folder), entry.getAbsolutePath(), true)); + dir.add(new FolderBrowserItem(m_activity, entryName, getString(R.string.folder), entry.getAbsolutePath(), true)); } else { if (validExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); + fls.add(new FolderBrowserItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } else if (invalidExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), false)); + fls.add(new FolderBrowserItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), false)); } } } @@ -70,7 +70,7 @@ public class FolderBrowser extends Fragment { // Check for a parent directory to the one we're currently in. if (!currDir.getPath().equalsIgnoreCase("/")) - dir.add(0, new GameListItem(m_activity, "..", getString(R.string.parent_directory), currDir.getParent(), true)); + dir.add(0, new FolderBrowserItem(m_activity, "..", getString(R.string.parent_directory), currDir.getParent(), true)); adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, dir); mDrawerList = (ListView) rootView.findViewById(R.id.gamelist); @@ -94,15 +94,15 @@ public class FolderBrowser extends Fragment { { public void onItemClick(AdapterView parent, View view, int position, long id) { - GameListItem o = adapter.getItem(position); - if(o.getData().equalsIgnoreCase(getString(R.string.folder)) || o.getData().equalsIgnoreCase(getString(R.string.parent_directory))) + FolderBrowserItem o = adapter.getItem(position); + if(o.isDirectory() || o.getSubtitle().equalsIgnoreCase(getString(R.string.parent_directory))) { currentDir = new File(o.getPath()); Fill(currentDir); } else { - if (o.isValid()) + if (o.isValidItem()) FolderSelected(); else Toast.makeText(m_activity, getString(R.string.cant_use_compressed_filetypes), Toast.LENGTH_LONG).show(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java index 30c1747781..0c38aa7b2f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java @@ -1,58 +1,79 @@ package org.dolphinemu.dolphinemu; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.ImageView; import android.widget.TextView; import java.util.List; -public class FolderBrowserAdapter extends ArrayAdapter{ +public class FolderBrowserAdapter extends ArrayAdapter{ private Context c; private int id; - private Listitems; + private List items; - public FolderBrowserAdapter(Context context, int textViewResourceId, - List objects) { + public FolderBrowserAdapter(Context context, int textViewResourceId, List objects) { super(context, textViewResourceId, objects); c = context; id = textViewResourceId; items = objects; } - public GameListItem getItem(int i) + public FolderBrowserItem getItem(int i) { return items.get(i); } + @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(int position, View convertView, ViewGroup parent) + { View v = convertView; - if (v == null) { - LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - v = vi.inflate(id, null); + if (v == null) + { + LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + v = vi.inflate(id, parent, false); } - final GameListItem o = items.get(position); - if (o != null) { - TextView t1 = (TextView) v.findViewById(R.id.FolderTitle); - TextView t2 = (TextView) v.findViewById(R.id.FolderSubTitle); + + final FolderBrowserItem item = items.get(position); + if (item != null) + { + ImageView iconView = (ImageView) v.findViewById(R.id.ImageIcon); + TextView mainText = (TextView) v.findViewById(R.id.FolderTitle); + TextView subtitleText = (TextView) v.findViewById(R.id.FolderSubTitle); - if(t1!=null) + if(mainText != null) { - t1.setText(o.getName()); - if (!o.isValid()) - t1.setTextColor(0xFFFF0000); + mainText.setText(item.getName()); + + if (!item.isValidItem()) + { + mainText.setTextColor(0xFFFF0000); + } + } + + if(subtitleText != null) + { + subtitleText.setText(item.getSubtitle()); + } + + if (iconView != null) + { + if (item.isDirectory()) + { + iconView.setImageResource(R.drawable.ic_menu_folder); + } + else + { + iconView.setImageResource(R.drawable.ic_menu_file); + } } - if(t2!=null) - t2.setText(o.getData()); } return v; } - - - } - diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java new file mode 100644 index 0000000000..d2f8773e24 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java @@ -0,0 +1,113 @@ +package org.dolphinemu.dolphinemu; + +import java.io.File; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; + +/** + * Represents an item in the folder browser list. + */ +public final class FolderBrowserItem implements Comparable +{ + private final Context ctx; + private final String name; + private final String subtitle; + private final String path; + private final boolean isValid; + private final File underlyingFile; + + /** + * Constructor + * + * @param ctx Context this FolderBrowserItem is being used in. + * @param name The name of the file/folder represented by this item. + * @param subtitle The subtitle of this FolderBrowserItem to display. + * @param path The path of the file/folder represented by this item. + * @param isValid Whether or not this item represents a file type that can be handled. + */ + public FolderBrowserItem(Context ctx, String name, String subtitle, String path, boolean isValid) + { + this.ctx = ctx; + this.name = name; + this.subtitle = subtitle; + this.path = path; + this.isValid = isValid; + this.underlyingFile = new File(path); + } + + /** + * Gets the name of the file/folder represented by this FolderBrowserItem. + * + * @return the name of the file/folder represented by this FolderBrowserItem. + */ + public String getName() + { + return name; + } + + /** + * Gets the subtitle text of this FolderBrowserItem. + * + * @return the subtitle text of this FolderBrowserItem. + */ + public String getSubtitle() + { + return subtitle; + } + + /** + * Gets the path of the file/folder represented by this FolderBrowserItem. + * + * @return the path of the file/folder represented by this FolderBrowserItem. + */ + public String getPath() + { + return path; + } + + /** + * Gets whether or not the file represented + * by this FolderBrowserItem is supported + * and can be handled correctly. + * + * @return whether or not the file represented + * by this FolderBrowserItem is supported + * and can be handled correctly. + */ + public boolean isValidItem() + { + return isValid; + } + + /** + * Gets the {@link File} representation of the underlying file/folder + * represented by this FolderBrowserItem. + * + * @return the {@link File} representation of the underlying file/folder + * represented by this FolderBrowserItem. + */ + public File getUnderlyingFile() + { + return underlyingFile; + } + + /** + * Gets whether or not this FolderBrowserItem represents a directory. + * + * @return true if this FolderBrowserItem represents a directory, false otherwise. + */ + public boolean isDirectory() + { + return underlyingFile.isDirectory(); + } + + public int compareTo(FolderBrowserItem other) + { + if(this.name != null) + return this.name.toLowerCase().compareTo(other.getName().toLowerCase()); + else + throw new IllegalArgumentException(); + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java index ff8a077703..0a6f69a1d0 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java @@ -1,10 +1,14 @@ -package org.dolphinemu.dolphinemu; - -/** +/* * Copyright 2013 Dolphin Emulator Project * Licensed under GPLv2 * Refer to the license.txt file included. */ + +package org.dolphinemu.dolphinemu; + +/** + * Represents a controller input item (button, stick, etc). + */ public class InputConfigItem implements Comparable{ private String m_name; private String m_Config; @@ -20,27 +24,65 @@ public class InputConfigItem implements Comparable{ m_bind = NativeLibrary.GetConfig("Dolphin.ini", Key, Value, defaultBind); } + /** + * Constructor + * + * @param name Name of the input config item. + * @param config Name of the key in the configuration file that this control modifies. + * @param defaultBind Default binding to fall back upon if binding fails. + */ public InputConfigItem(String name, String config, String defaultBind) { Init(name, config, defaultBind); } + /** + * Constructor that creates an InputConfigItem + * that has a default binding of "None" + * + * @param name Name of the input config item. + * @param config Name of the key in the configuration file that this control modifies. + */ public InputConfigItem(String name, String config) { Init(name, config, "None"); } + + /** + * Gets the name of this InputConfigItem. + * + * @return the name of this InputConfigItem + */ public String getName() { return m_name; } + + /** + * Gets the config key this InputConfigItem modifies. + * + * @return the config key this InputConfigItem modifies. + */ public String getConfig() { return m_Config; } + + /** + * Gets the currently set binding of this InputConfigItem + * + * @return the currently set binding of this InputConfigItem + */ public String getBind() { return m_bind; } + + /** + * Sets a new binding for this InputConfigItem. + * + * @param bind The new binding. + */ public void setBind(String bind) { m_bind = bind; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java index f089362c38..da58274c5f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -1,12 +1,17 @@ +/* + * Copyright 2013 Dolphin Emulator Project + * Licensed under GPLv2 + * Refer to the license.txt file included. + */ + package org.dolphinemu.dolphinemu; import android.util.Log; import android.view.Surface; /** - * Copyright 2013 Dolphin Emulator Project - * Licensed under GPLv2 - * Refer to the license.txt file included. + * Class which contains methods that interact + * with the native side of the Dolphin code. */ public class NativeLibrary { public static native void onTouchEvent(int Action, float X, float Y); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java index 599ce5007a..eb2143becb 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java @@ -16,34 +16,38 @@ public class SideMenuAdapter extends ArrayAdapter{ private Listitems; public SideMenuAdapter(Context context, int textViewResourceId, - List objects) { + List objects) + { super(context, textViewResourceId, objects); c = context; id = textViewResourceId; items = objects; } + public SideMenuItem getItem(int i) - { + { return items.get(i); - } - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - if (v == null) { - LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - v = vi.inflate(id, null); - } - final SideMenuItem o = items.get(position); - if (o != null) { - TextView t1 = (TextView) v.findViewById(R.id.SideMenuTitle); - - if(t1!=null) - t1.setText(o.getName()); - } - return v; - } - - - + } + @Override + public View getView(int position, View convertView, ViewGroup parent) + { + View v = convertView; + if (v == null) + { + LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + v = vi.inflate(id, null); + } + + final SideMenuItem o = items.get(position); + if (o != null) + { + TextView t1 = (TextView) v.findViewById(R.id.SideMenuTitle); + + if(t1!=null) + t1.setText(o.getName()); + } + + return v; + } } diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java index e24842bed1..6d204d0d69 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java @@ -1,25 +1,47 @@ -package org.dolphinemu.dolphinemu; - -/** +/* * Copyright 2013 Dolphin Emulator Project * Licensed under GPLv2 * Refer to the license.txt file included. */ -public class SideMenuItem implements Comparable{ +package org.dolphinemu.dolphinemu; + + +/** + * Represents an item that goes in the sidemenu of the app. + */ +public class SideMenuItem implements Comparable +{ private String m_name; private int m_id; - public SideMenuItem(String n, int id) + /** + * Constructor + * + * @param name The name of the SideMenuItem. + * @param id ID number of this specific SideMenuItem. + */ + public SideMenuItem(String name, int id) { - m_name = n; + m_name = name; m_id = id; } + /** + * Gets the name of this SideMenuItem. + * + * @return the name of this SideMenuItem. + */ public String getName() { return m_name; } + + /** + * Gets the ID of this SideMenuItem. + * + * @return the ID of this SideMenuItem. + */ public int getID() { return m_id; From 3cc8f7747e22f9a2a519a5dd559ac338791aae2b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Tue, 13 Aug 2013 14:32:46 -0400 Subject: [PATCH 10/11] [Android] Main title text for the file browser items are bolded again. Must have removed it accidentally during the previous large refactor. --- Source/Android/res/layout/folderbrowser.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Android/res/layout/folderbrowser.xml b/Source/Android/res/layout/folderbrowser.xml index 61c6fba1ea..adfd72ed35 100644 --- a/Source/Android/res/layout/folderbrowser.xml +++ b/Source/Android/res/layout/folderbrowser.xml @@ -38,6 +38,6 @@ android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" - android:text="Title" /> - + android:text="Title" + android:textStyle="bold" />/> From a791733c27fa5464e58e59df023ddda500fd5760 Mon Sep 17 00:00:00 2001 From: John Chadwick Date: Tue, 13 Aug 2013 14:47:32 -0400 Subject: [PATCH 11/11] Fix invalid C++ code (returning reference to local) - thanks devm33. --- Source/Core/DolphinWX/Src/NetWindow.cpp | 2 +- Source/Core/DolphinWX/Src/NetWindow.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/DolphinWX/Src/NetWindow.cpp b/Source/Core/DolphinWX/Src/NetWindow.cpp index 1c8f0549b9..e4bc377f37 100644 --- a/Source/Core/DolphinWX/Src/NetWindow.cpp +++ b/Source/Core/DolphinWX/Src/NetWindow.cpp @@ -409,7 +409,7 @@ void NetPlayDiag::GetNetSettings(NetSettings &settings) settings.m_Controllers[i] = SConfig::GetInstance().m_SIDevice[i]; } -const std::string& NetPlayDiag::FindGame() +std::string NetPlayDiag::FindGame() { // find path for selected game, sloppy.. for (u32 i = 0 ; auto game = m_game_list->GetISO(i); ++i) diff --git a/Source/Core/DolphinWX/Src/NetWindow.h b/Source/Core/DolphinWX/Src/NetWindow.h index 543c164994..e798033eab 100644 --- a/Source/Core/DolphinWX/Src/NetWindow.h +++ b/Source/Core/DolphinWX/Src/NetWindow.h @@ -92,7 +92,7 @@ private: void OnAdjustBuffer(wxCommandEvent& event); void OnConfigPads(wxCommandEvent& event); void GetNetSettings(NetSettings &settings); - const std::string& FindGame(); + std::string FindGame(); wxListBox* m_player_lbox; wxTextCtrl* m_chat_text;