android: frontend: SettingsFragmentPresenter: Organize settings into logical categories.

This commit is contained in:
bunnei 2019-07-19 19:29:03 -04:00
parent 68cabace70
commit c7c41586ca
5 changed files with 80 additions and 90 deletions

View File

@ -149,20 +149,4 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
public void onSettingChanged() { public void onSettingChanged() {
mActivity.onSettingChanged(); mActivity.onSettingChanged();
} }
@Override
public void onGcPadSettingChanged(String key, int value) {
mActivity.onGcPadSettingChanged(key, value);
}
@Override
public void onWiimoteSettingChanged(String section, int value) {
mActivity.onWiimoteSettingChanged(section, value);
}
@Override
public void onExtensionSettingChanged(String key, int value) {
mActivity.onExtensionSettingChanged(key, value);
}
} }

View File

@ -3,16 +3,14 @@ package org.citra.citra_android.ui.settings;
import android.text.TextUtils; import android.text.TextUtils;
import org.citra.citra_android.R; import org.citra.citra_android.R;
import org.citra.citra_android.model.settings.IntSetting;
import org.citra.citra_android.model.settings.Setting; import org.citra.citra_android.model.settings.Setting;
import org.citra.citra_android.model.settings.SettingSection; import org.citra.citra_android.model.settings.SettingSection;
import org.citra.citra_android.model.settings.view.CheckBoxSetting; import org.citra.citra_android.model.settings.view.CheckBoxSetting;
import org.citra.citra_android.model.settings.view.DateTimeSetting; import org.citra.citra_android.model.settings.view.DateTimeSetting;
import org.citra.citra_android.model.settings.view.HeaderSetting;
import org.citra.citra_android.model.settings.view.SettingsItem; import org.citra.citra_android.model.settings.view.SettingsItem;
import org.citra.citra_android.model.settings.view.SingleChoiceSetting; import org.citra.citra_android.model.settings.view.SingleChoiceSetting;
import org.citra.citra_android.model.settings.view.SliderSetting; import org.citra.citra_android.model.settings.view.SliderSetting;
import org.citra.citra_android.utils.EGLHelper; import org.citra.citra_android.model.settings.view.SubmenuSetting;
import org.citra.citra_android.utils.SettingsFile; import org.citra.citra_android.utils.SettingsFile;
import java.util.ArrayList; import java.util.ArrayList;
@ -66,6 +64,7 @@ public final class SettingsFragmentPresenter {
loadSettingsList(); loadSettingsList();
} else { } else {
mView.getActivity().setTitle(R.string.preferences_settings);
mView.showSettingsList(mSettingsList); mView.showSettingsList(mSettingsList);
} }
} }
@ -78,10 +77,20 @@ public final class SettingsFragmentPresenter {
switch (mMenuTag) { switch (mMenuTag) {
case SettingsFile.FILE_NAME_CONFIG: case SettingsFile.FILE_NAME_CONFIG:
addCoreSettings(sl); addConfigSettings(sl);
sl.add(new HeaderSetting(null, null, R.string.video_backend, 0)); break;
case SettingsFile.SECTION_GENERAL:
addGeneralSettings(sl);
break;
case SettingsFile.SECTION_SYSTEM:
addSystemSettings(sl);
break;
case SettingsFile.SECTION_GRAPHICS:
addGraphicsSettings(sl); addGraphicsSettings(sl);
break; break;
case SettingsFile.SECTION_AUDIO:
addAudioSettings(sl);
break;
default: default:
mView.showToastMessage("Unimplemented menu"); mView.showToastMessage("Unimplemented menu");
return; return;
@ -91,16 +100,43 @@ public final class SettingsFragmentPresenter {
mView.showSettingsList(mSettingsList); mView.showSettingsList(mSettingsList);
} }
private void addCoreSettings(ArrayList<SettingsItem> sl) { private void addConfigSettings(ArrayList<SettingsItem> sl) {
mView.getActivity().setTitle(R.string.preferences_settings);
sl.add(new SubmenuSetting(null, null, R.string.preferences_general, 0, SettingsFile.SECTION_GENERAL));
sl.add(new SubmenuSetting(null, null, R.string.preferences_system, 0, SettingsFile.SECTION_SYSTEM));
sl.add(new SubmenuSetting(null, null, R.string.preferences_graphics, 0, SettingsFile.SECTION_GRAPHICS));
sl.add(new SubmenuSetting(null, null, R.string.preferences_audio, 0, SettingsFile.SECTION_AUDIO));
}
private void addGeneralSettings(ArrayList<SettingsItem> sl) {
mView.getActivity().setTitle(R.string.preferences_general);
Setting useCpuJit = null; Setting useCpuJit = null;
Setting audioStretch = null; Setting frameLimitEnable = null;
Setting frameLimitValue = null;
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) {
useCpuJit = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GENERAL).getSetting(SettingsFile.KEY_CPU_JIT);
frameLimitEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GENERAL).getSetting(SettingsFile.KEY_FRAME_LIMIT_ENABLED);
frameLimitValue = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GENERAL).getSetting(SettingsFile.KEY_FRAME_LIMIT);
} else {
mView.passSettingsToActivity(mSettings);
}
sl.add(new CheckBoxSetting(SettingsFile.KEY_CPU_JIT, SettingsFile.SECTION_GENERAL, SettingsFile.SETTINGS_DOLPHIN, R.string.cpu_jit, 0, true, useCpuJit));
sl.add(new CheckBoxSetting(SettingsFile.KEY_FRAME_LIMIT_ENABLED, SettingsFile.SECTION_GENERAL, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_enable, 0, false, frameLimitEnable));
sl.add(new SliderSetting(SettingsFile.KEY_FRAME_LIMIT, SettingsFile.SECTION_GENERAL, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_title, R.string.overclock_enable_description, 500, "%", 100, frameLimitValue));
}
private void addSystemSettings(ArrayList<SettingsItem> sl) {
mView.getActivity().setTitle(R.string.preferences_system);
Setting region = null; Setting region = null;
Setting systemClock = null; Setting systemClock = null;
Setting dateTime = null; Setting dateTime = null;
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) { if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) {
useCpuJit = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_CPU_JIT);
audioStretch = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_AUDIO).getSetting(SettingsFile.KEY_ENABLE_AUDIO_STRETCHING);
region = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_REGION_VALUE); region = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_REGION_VALUE);
systemClock = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_CLOCK); systemClock = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_CLOCK);
dateTime = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_TIME); dateTime = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_SYSTEM).getSetting(SettingsFile.KEY_INIT_TIME);
@ -108,32 +144,28 @@ public final class SettingsFragmentPresenter {
mView.passSettingsToActivity(mSettings); mView.passSettingsToActivity(mSettings);
} }
sl.add(new CheckBoxSetting(SettingsFile.KEY_CPU_JIT, SettingsFile.SECTION_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.cpu_jit, 0, true, useCpuJit));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_VALUE, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.region, 0, R.array.regionNames, R.array.regionValues, -1, region)); sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_VALUE, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.region, 0, R.array.regionNames, R.array.regionValues, -1, region));
sl.add(new CheckBoxSetting(SettingsFile.KEY_ENABLE_AUDIO_STRETCHING, SettingsFile.SECTION_AUDIO, SettingsFile.SETTINGS_DOLPHIN, R.string.audio_stretch, R.string.audio_stretch_description, false, audioStretch));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_INIT_CLOCK, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_clock, R.string.init_clock_descrip, R.array.systemClockNames, R.array.systemClockValues, 0, systemClock)); sl.add(new SingleChoiceSetting(SettingsFile.KEY_INIT_CLOCK, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_clock, R.string.init_clock_descrip, R.array.systemClockNames, R.array.systemClockValues, 0, systemClock));
sl.add(new DateTimeSetting(SettingsFile.KEY_INIT_TIME, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_time, R.string.init_time_descrip, "2000-01-01 00:00:01", dateTime)); sl.add(new DateTimeSetting(SettingsFile.KEY_INIT_TIME, SettingsFile.SECTION_SYSTEM, SettingsFile.SETTINGS_DOLPHIN, R.string.init_time, R.string.init_time_descrip, "2000-01-01 00:00:01", dateTime));
} }
private void addGraphicsSettings(ArrayList<SettingsItem> sl) { private void addGraphicsSettings(ArrayList<SettingsItem> sl) {
mView.getActivity().setTitle(R.string.preferences_graphics);
Setting hardwareRenderer = null; Setting hardwareRenderer = null;
Setting hardwareShader = null; Setting hardwareShader = null;
Setting shadersAccurateMul = null; Setting shadersAccurateMul = null;
Setting shadersAccurateGs = null; Setting shadersAccurateGs = null;
Setting resolutionFactor = null; Setting resolutionFactor = null;
Setting vsyncEnable = null; Setting vsyncEnable = null;
Setting frameLimitEnable = null;
Setting frameLimitValue = null;
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) { if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) {
hardwareRenderer = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_HW_RENDERER); hardwareRenderer = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_HW_RENDERER);
hardwareShader = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_HW_SHADER); hardwareShader = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_HW_SHADER);
shadersAccurateMul = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL); shadersAccurateMul = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL);
shadersAccurateGs = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS); shadersAccurateGs = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS);
resolutionFactor = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_RESOLUTION_FACTOR); resolutionFactor = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_RESOLUTION_FACTOR);
vsyncEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_USE_VSYNC); vsyncEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_USE_VSYNC);
frameLimitEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_FRAME_LIMIT_ENABLED);
frameLimitValue = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_FRAME_LIMIT);
} else { } else {
mView.passSettingsToActivity(mSettings); mView.passSettingsToActivity(mSettings);
} }
@ -142,13 +174,25 @@ public final class SettingsFragmentPresenter {
mView.passSettingsToActivity(mSettings); mView.passSettingsToActivity(mSettings);
} }
sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_RENDERER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_renderer, 0, true, hardwareRenderer)); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_RENDERER, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_renderer, 0, true, hardwareRenderer));
sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_SHADER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_shaders, R.string.hw_shaders_descrip, true, hardwareShader)); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_SHADER, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_shaders, R.string.hw_shaders_descrip, true, hardwareShader));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_mul, 0, false, shadersAccurateMul)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_mul, 0, false, shadersAccurateMul));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_gs, 0, false, shadersAccurateGs)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_gs, 0, false, shadersAccurateGs));
sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.internal_resolution, R.string.internal_resolution_descrip, 10, "x", 0, resolutionFactor)); sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.internal_resolution, R.string.internal_resolution_descrip, 10, "x", 0, resolutionFactor));
sl.add(new CheckBoxSetting(SettingsFile.KEY_USE_VSYNC, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.vsync, 0, false, vsyncEnable)); sl.add(new CheckBoxSetting(SettingsFile.KEY_USE_VSYNC, SettingsFile.SECTION_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.vsync, 0, false, vsyncEnable));
sl.add(new CheckBoxSetting(SettingsFile.KEY_FRAME_LIMIT_ENABLED, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_enable, 0, false, frameLimitEnable)); }
sl.add(new SliderSetting(SettingsFile.KEY_FRAME_LIMIT, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_title, R.string.overclock_enable_description, 500, "%", 100, frameLimitValue));
private void addAudioSettings(ArrayList<SettingsItem> sl) {
mView.getActivity().setTitle(R.string.preferences_audio);
Setting audioStretch = null;
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) {
audioStretch = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_AUDIO).getSetting(SettingsFile.KEY_ENABLE_AUDIO_STRETCHING);
} else {
mView.passSettingsToActivity(mSettings);
}
sl.add(new CheckBoxSetting(SettingsFile.KEY_ENABLE_AUDIO_STRETCHING, SettingsFile.SECTION_AUDIO, SettingsFile.SETTINGS_DOLPHIN, R.string.audio_stretch, R.string.audio_stretch_description, false, audioStretch));
} }
} }

View File

@ -75,29 +75,4 @@ public interface SettingsFragmentView {
* Have the fragment tell the containing Activity that a setting was modified. * Have the fragment tell the containing Activity that a setting was modified.
*/ */
void onSettingChanged(); void onSettingChanged();
/**
* Have the fragment tell the containing Activity that a GCPad's setting was modified.
*
* @param key Identifier for the GCPad that was modified.
* @param value New setting for the GCPad.
*/
void onGcPadSettingChanged(String key, int value);
/**
* Have the fragment tell the containing Activity that a Wiimote's setting was modified.
*
* @param section Identifier for Wiimote that was modified; Wiimotes are identified by their section,
* not their key.
* @param value New setting for the Wiimote.
*/
void onWiimoteSettingChanged(String section, int value);
/**
* Have the fragment tell the containing Activity that an extension setting was modified.
*
* @param key Identifier for the extension that was modified.
* @param value New setting for the extension.
*/
void onExtensionSettingChanged(String key, int value);
} }

View File

@ -49,16 +49,10 @@ public final class SettingsFile {
public static final String FILE_NAME_CONFIG = "config"; public static final String FILE_NAME_CONFIG = "config";
public static final String SECTION_CONTROLS = "Controls"; public static final String SECTION_GENERAL = "General";
public static final String SECTION_CORE = "Core";
public static final String SECTION_RENDERER = "Renderer";
public static final String SECTION_LAYOUT = "Layout";
public static final String SECTION_AUDIO = "Audio";
public static final String SECTION_SYSTEM = "System"; public static final String SECTION_SYSTEM = "System";
public static final String SECTION_CAMERA = "Camera"; public static final String SECTION_GRAPHICS = "Graphics";
public static final String SECTION_MISC = "Miscellaneous"; public static final String SECTION_AUDIO = "Audio";
public static final String SECTION_DEBUGGING = "Debugging";
public static final String SECTION_WEBSERVICE = "WebService";
public static final String KEY_CPU_JIT = "use_cpu_jit"; public static final String KEY_CPU_JIT = "use_cpu_jit";

View File

@ -108,7 +108,6 @@
<string name="vsync">Enable V-Sync</string> <string name="vsync">Enable V-Sync</string>
<string name="hw_renderer">Enable hardware renderer</string> <string name="hw_renderer">Enable hardware renderer</string>
<string name="hw_shaders">Enable hardware shader</string> <string name="hw_shaders">Enable hardware shader</string>
<string name="use_shader_jit">Enable JIT compiler for shaders</string>
<string name="hw_shaders_descrip">Use hardware to emulate 3DS shaders</string> <string name="hw_shaders_descrip">Use hardware to emulate 3DS shaders</string>
<string name="shaders_accurate_mul">Enable accurate multiplication in hardware shaders</string>> <string name="shaders_accurate_mul">Enable accurate multiplication in hardware shaders</string>>
<string name="shaders_accurate_gs">Enable accurate geometric shaders in hardware shaders</string> <string name="shaders_accurate_gs">Enable accurate geometric shaders in hardware shaders</string>
@ -132,16 +131,6 @@
<string name="disable_fog_descrip">Makes distant objects more visible by removing fog, thus increasing the overall detail. Disabling fog will break some games which rely on proper fog emulation.</string> <string name="disable_fog_descrip">Makes distant objects more visible by removing fog, thus increasing the overall detail. Disabling fog will break some games which rely on proper fog emulation.</string>
<string name="disable_copy_filter">Disable Copy Filter</string> <string name="disable_copy_filter">Disable Copy Filter</string>
<string name="disable_copy_filter_descrip">Disables the blending of adjacent rows when copying the EFB. This is known in some games as \"deflickering\" or \"smoothing\". Disabling the filter is usually safe, and may result in a sharper image.</string> <string name="disable_copy_filter_descrip">Disables the blending of adjacent rows when copying the EFB. This is known in some games as \"deflickering\" or \"smoothing\". Disabling the filter is usually safe, and may result in a sharper image.</string>
<string name="stereoscopy">Stereoscopy</string>
<string name="stereoscopy_descrip">Stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nHeavily decreases emulation speed and sometimes causes issues</string>
<string name="stereoscopy_mode">Stereoscopy Mode</string>
<string name="stereoscopy_mode_descrip">Select the stereoscopic 3D mode.</string>
<string name="sterescopy_depth">Depth</string>
<string name="sterescopy_depth_descrip">Control the distance between the virtual cameras.\nA higher value creates a stronger feeling of depth while a lower value is more comfortable.</string>
<string name="sterescopy_convergence">Convergence</string>
<string name="sterescopy_convergence_descrip">Control the distance of the convergence plane, this is the distance at which objects will appear to be in front of the screen.\nA higher value creates stronger out-of-screen effects while a lower value is more comfortable.</string>
<string name="sterescopy_swap_eyes">Swap Eyes</string>
<string name="sterescopy_swap_eyes_descrip">Swap the left and right eye, mostly useful if you want to view side-by-side cross-eyed.</string>
<string name="hacks">Hacks</string> <string name="hacks">Hacks</string>
<string name="embedded_frame_buffer">Embedded Frame Buffer</string> <string name="embedded_frame_buffer">Embedded Frame Buffer</string>
@ -196,6 +185,10 @@
<string name="preferences_settings">Settings</string> <string name="preferences_settings">Settings</string>
<string name="preferences_game_settings">Game Settings</string> <string name="preferences_game_settings">Game Settings</string>
<string name="preferences_extensions">Extension Bindings</string> <string name="preferences_extensions">Extension Bindings</string>
<string name="preferences_general">General</string>
<string name="preferences_system">System</string>
<string name="preferences_graphics">Graphics</string>
<string name="preferences_audio">Audio</string>
<!-- Emulation Menu --> <!-- Emulation Menu -->
<string name="emulation_screenshot">Take Screenshot</string> <string name="emulation_screenshot">Take Screenshot</string>