diff --git a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragment.java b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragment.java index 9db08e057..793d8e6d8 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragment.java +++ b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragment.java @@ -149,20 +149,4 @@ public final class SettingsFragment extends Fragment implements SettingsFragment public void 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); - } - } diff --git a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java index e1a304da3..462626798 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentPresenter.java @@ -3,16 +3,14 @@ package org.citra.citra_android.ui.settings; import android.text.TextUtils; 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.SettingSection; 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.HeaderSetting; 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.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 java.util.ArrayList; @@ -66,6 +64,7 @@ public final class SettingsFragmentPresenter { loadSettingsList(); } else { + mView.getActivity().setTitle(R.string.preferences_settings); mView.showSettingsList(mSettingsList); } } @@ -78,10 +77,20 @@ public final class SettingsFragmentPresenter { switch (mMenuTag) { case SettingsFile.FILE_NAME_CONFIG: - addCoreSettings(sl); - sl.add(new HeaderSetting(null, null, R.string.video_backend, 0)); + addConfigSettings(sl); + break; + case SettingsFile.SECTION_GENERAL: + addGeneralSettings(sl); + break; + case SettingsFile.SECTION_SYSTEM: + addSystemSettings(sl); + break; + case SettingsFile.SECTION_GRAPHICS: addGraphicsSettings(sl); break; + case SettingsFile.SECTION_AUDIO: + addAudioSettings(sl); + break; default: mView.showToastMessage("Unimplemented menu"); return; @@ -91,16 +100,43 @@ public final class SettingsFragmentPresenter { mView.showSettingsList(mSettingsList); } - private void addCoreSettings(ArrayList sl) { + private void addConfigSettings(ArrayList 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 sl) { + mView.getActivity().setTitle(R.string.preferences_general); + 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 sl) { + mView.getActivity().setTitle(R.string.preferences_system); + Setting region = null; Setting systemClock = null; Setting dateTime = null; 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); 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); @@ -108,32 +144,28 @@ public final class SettingsFragmentPresenter { 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 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 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 sl) { + mView.getActivity().setTitle(R.string.preferences_graphics); + Setting hardwareRenderer = null; Setting hardwareShader = null; Setting shadersAccurateMul = null; Setting shadersAccurateGs = null; Setting resolutionFactor = null; Setting vsyncEnable = null; - Setting frameLimitEnable = null; - Setting frameLimitValue = null; if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) { - hardwareRenderer = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_HW_RENDERER); - hardwareShader = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_HW_SHADER); - shadersAccurateMul = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL); - shadersAccurateGs = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS); - resolutionFactor = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).getSetting(SettingsFile.KEY_RESOLUTION_FACTOR); - vsyncEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_RENDERER).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); + hardwareRenderer = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_HW_RENDERER); + hardwareShader = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_HW_SHADER); + 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_GRAPHICS).getSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS); + resolutionFactor = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_RESOLUTION_FACTOR); + vsyncEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_GRAPHICS).getSetting(SettingsFile.KEY_USE_VSYNC); } else { mView.passSettingsToActivity(mSettings); } @@ -142,13 +174,25 @@ public final class SettingsFragmentPresenter { 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_SHADER, SettingsFile.SECTION_RENDERER, 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_GS, SettingsFile.SECTION_RENDERER, 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 CheckBoxSetting(SettingsFile.KEY_USE_VSYNC, SettingsFile.SECTION_RENDERER, 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)); + 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_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_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_mul, 0, false, shadersAccurateMul)); + 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_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_GRAPHICS, SettingsFile.SETTINGS_DOLPHIN, R.string.vsync, 0, false, vsyncEnable)); + } + + private void addAudioSettings(ArrayList 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)); } } \ No newline at end of file diff --git a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentView.java b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentView.java index 2f29f3aad..c240cc59f 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentView.java +++ b/src/android/app/src/main/java/org/citra/citra_android/ui/settings/SettingsFragmentView.java @@ -75,29 +75,4 @@ public interface SettingsFragmentView { * Have the fragment tell the containing Activity that a setting was modified. */ 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); } diff --git a/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java b/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java index 9ad28715c..253801cbe 100644 --- a/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/citra/citra_android/utils/SettingsFile.java @@ -49,16 +49,10 @@ public final class SettingsFile { public static final String FILE_NAME_CONFIG = "config"; - public static final String SECTION_CONTROLS = "Controls"; - 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_GENERAL = "General"; public static final String SECTION_SYSTEM = "System"; - public static final String SECTION_CAMERA = "Camera"; - public static final String SECTION_MISC = "Miscellaneous"; - public static final String SECTION_DEBUGGING = "Debugging"; - public static final String SECTION_WEBSERVICE = "WebService"; + public static final String SECTION_GRAPHICS = "Graphics"; + public static final String SECTION_AUDIO = "Audio"; public static final String KEY_CPU_JIT = "use_cpu_jit"; diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 3d53fb721..5fe68c613 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -108,7 +108,6 @@ Enable V-Sync Enable hardware renderer Enable hardware shader - Enable JIT compiler for shaders Use hardware to emulate 3DS shaders Enable accurate multiplication in hardware shaders> Enable accurate geometric shaders in hardware shaders @@ -132,16 +131,6 @@ 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. Disable Copy Filter 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. - Stereoscopy - Stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nHeavily decreases emulation speed and sometimes causes issues - Stereoscopy Mode - Select the stereoscopic 3D mode. - Depth - Control the distance between the virtual cameras.\nA higher value creates a stronger feeling of depth while a lower value is more comfortable. - Convergence - 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. - Swap Eyes - Swap the left and right eye, mostly useful if you want to view side-by-side cross-eyed. Hacks Embedded Frame Buffer @@ -196,6 +185,10 @@ Settings Game Settings Extension Bindings + General + System + Graphics + Audio Take Screenshot