summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java184
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt333
2 files changed, 333 insertions, 184 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java
deleted file mode 100644
index 49447e606..000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.yuzu.yuzu_emu.features.settings.ui;
-
-import android.text.TextUtils;
-
-import org.yuzu.yuzu_emu.R;
-import org.yuzu.yuzu_emu.features.settings.model.Setting;
-import org.yuzu.yuzu_emu.features.settings.model.SettingSection;
-import org.yuzu.yuzu_emu.features.settings.model.Settings;
-import org.yuzu.yuzu_emu.features.settings.model.StringSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.DateTimeSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.HeaderSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem;
-import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.SliderSetting;
-import org.yuzu.yuzu_emu.features.settings.model.view.SubmenuSetting;
-import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile;
-
-import java.util.ArrayList;
-
-public final class SettingsFragmentPresenter {
- private SettingsFragmentView mView;
-
- private String mMenuTag;
- private String mGameID;
-
- private Settings mSettings;
- private ArrayList<SettingsItem> mSettingsList;
-
- public SettingsFragmentPresenter(SettingsFragmentView view) {
- mView = view;
- }
-
- public void onCreate(String menuTag, String gameId) {
- mGameID = gameId;
- mMenuTag = menuTag;
- }
-
- public void onViewCreated(Settings settings) {
- setSettings(settings);
- }
-
- /**
- * If the screen is rotated, the Activity will forget the settings map. This fragment
- * won't, though; so rather than have the Activity reload from disk, have the fragment pass
- * the settings map back to the Activity.
- */
- public void onAttach() {
- if (mSettings != null) {
- mView.passSettingsToActivity(mSettings);
- }
- }
-
- public void putSetting(Setting setting) {
- mSettings.getSection(setting.getSection()).putSetting(setting);
- }
-
- private StringSetting asStringSetting(Setting setting) {
- if (setting == null) {
- return null;
- }
-
- StringSetting stringSetting = new StringSetting(setting.getKey(), setting.getSection(), setting.getValueAsString());
- putSetting(stringSetting);
- return stringSetting;
- }
-
- public void loadDefaultSettings() {
- loadSettingsList();
- }
-
- public void setSettings(Settings settings) {
- if (mSettingsList == null && settings != null) {
- mSettings = settings;
-
- loadSettingsList();
- } else {
- mView.getActivity().setTitle(R.string.preferences_settings);
- mView.showSettingsList(mSettingsList);
- }
- }
-
- private void loadSettingsList() {
- if (!TextUtils.isEmpty(mGameID)) {
- mView.getActivity().setTitle("Game Settings: " + mGameID);
- }
- ArrayList<SettingsItem> sl = new ArrayList<>();
-
- if (mMenuTag == null) {
- return;
- }
-
- switch (mMenuTag) {
- case SettingsFile.FILE_NAME_CONFIG:
- addConfigSettings(sl);
- break;
- case Settings.SECTION_GENERAL:
- addGeneralSettings(sl);
- break;
- case Settings.SECTION_SYSTEM:
- addSystemSettings(sl);
- break;
- case Settings.SECTION_RENDERER:
- addGraphicsSettings(sl);
- break;
- case Settings.SECTION_AUDIO:
- addAudioSettings(sl);
- break;
- default:
- mView.showToastMessage("Unimplemented menu", false);
- return;
- }
-
- mSettingsList = sl;
- mView.showSettingsList(mSettingsList);
- }
-
- private void addConfigSettings(ArrayList<SettingsItem> sl) {
- mView.getActivity().setTitle(R.string.preferences_settings);
-
- sl.add(new SubmenuSetting(null, null, R.string.preferences_general, 0, Settings.SECTION_GENERAL));
- sl.add(new SubmenuSetting(null, null, R.string.preferences_system, 0, Settings.SECTION_SYSTEM));
- sl.add(new SubmenuSetting(null, null, R.string.preferences_graphics, 0, Settings.SECTION_RENDERER));
- sl.add(new SubmenuSetting(null, null, R.string.preferences_audio, 0, Settings.SECTION_AUDIO));
- }
-
- private void addGeneralSettings(ArrayList<SettingsItem> sl) {
- mView.getActivity().setTitle(R.string.preferences_general);
-
- SettingSection rendererSection = mSettings.getSection(Settings.SECTION_RENDERER);
- Setting frameLimitEnable = rendererSection.getSetting(SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT);
- Setting frameLimitValue = rendererSection.getSetting(SettingsFile.KEY_RENDERER_SPEED_LIMIT);
-
- sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT, Settings.SECTION_RENDERER, R.string.frame_limit_enable, R.string.frame_limit_enable_description, true, frameLimitEnable));
- sl.add(new SliderSetting(SettingsFile.KEY_RENDERER_SPEED_LIMIT, Settings.SECTION_RENDERER, R.string.frame_limit_slider, R.string.frame_limit_slider_description, 1, 200, "%", 100, frameLimitValue));
-
- SettingSection cpuSection = mSettings.getSection(Settings.SECTION_CPU);
- Setting cpuAccuracy = cpuSection.getSetting(SettingsFile.KEY_CPU_ACCURACY);
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_CPU_ACCURACY, Settings.SECTION_CPU, R.string.cpu_accuracy, 0, R.array.cpuAccuracyNames, R.array.cpuAccuracyValues, 0, cpuAccuracy));
- }
-
- private void addSystemSettings(ArrayList<SettingsItem> sl) {
- mView.getActivity().setTitle(R.string.preferences_system);
-
- SettingSection systemSection = mSettings.getSection(Settings.SECTION_SYSTEM);
- Setting dockedMode = systemSection.getSetting(SettingsFile.KEY_USE_DOCKED_MODE);
- Setting region = systemSection.getSetting(SettingsFile.KEY_REGION_INDEX);
- Setting language = systemSection.getSetting(SettingsFile.KEY_LANGUAGE_INDEX);
-
- sl.add(new CheckBoxSetting(SettingsFile.KEY_USE_DOCKED_MODE, Settings.SECTION_SYSTEM, R.string.use_docked_mode, R.string.use_docked_mode_description, true, dockedMode));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_INDEX, Settings.SECTION_SYSTEM, R.string.emulated_region, 0, R.array.regionNames, R.array.regionValues, -1, region));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_LANGUAGE_INDEX, Settings.SECTION_SYSTEM, R.string.emulated_language, 0, R.array.languageNames, R.array.languageValues, 1, language));
- }
-
- private void addGraphicsSettings(ArrayList<SettingsItem> sl) {
- mView.getActivity().setTitle(R.string.preferences_graphics);
-
- SettingSection rendererSection = mSettings.getSection(Settings.SECTION_RENDERER);
- Setting rendererBackend = rendererSection.getSetting(SettingsFile.KEY_RENDERER_BACKEND);
- Setting rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY);
- Setting rendererReolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION);
- Setting rendererAspectRation = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO);
- Setting rendererForceMaxClocks = rendererSection.getSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK);
- Setting rendererAsynchronousShaders = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS);
- Setting rendererDebug = rendererSection.getSetting(SettingsFile.KEY_RENDERER_DEBUG);
-
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_BACKEND, Settings.SECTION_RENDERER, R.string.renderer_api, 0, R.array.rendererApiNames, R.array.rendererApiValues, 1, rendererBackend));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ACCURACY, Settings.SECTION_RENDERER, R.string.renderer_accuracy, 0, R.array.rendererAccuracyNames, R.array.rendererAccuracyValues, 1, rendererAccuracy));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_RESOLUTION, Settings.SECTION_RENDERER, R.string.renderer_resolution, 0, R.array.rendererResolutionNames, R.array.rendererResolutionValues, 2, rendererReolution));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO, Settings.SECTION_RENDERER, R.string.renderer_aspect_ratio, 0, R.array.rendererAspectRatioNames, R.array.rendererAspectRatioValues, 0, rendererAspectRation));
- sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK, Settings.SECTION_RENDERER, R.string.renderer_force_max_clock, R.string.renderer_force_max_clock_description, true, rendererForceMaxClocks));
- sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS, Settings.SECTION_RENDERER, R.string.renderer_asynchronous_shaders, R.string.renderer_asynchronous_shaders_description, false, rendererAsynchronousShaders));
- sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_DEBUG, Settings.SECTION_RENDERER, R.string.renderer_debug, R.string.renderer_debug_description, false, rendererDebug));
- }
-
- private void addAudioSettings(ArrayList<SettingsItem> sl) {
- mView.getActivity().setTitle(R.string.preferences_audio);
-
- SettingSection audioSection = mSettings.getSection(Settings.SECTION_AUDIO);
- Setting audioVolume = audioSection.getSetting(SettingsFile.KEY_AUDIO_VOLUME);
-
- sl.add(new SliderSetting(SettingsFile.KEY_AUDIO_VOLUME, Settings.SECTION_AUDIO, R.string.audio_volume, R.string.audio_volume_description, 0, 100, "%", 100, audioVolume));
- }
-}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
new file mode 100644
index 000000000..e4058ffc2
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -0,0 +1,333 @@
+package org.yuzu.yuzu_emu.features.settings.ui
+
+import android.text.TextUtils
+import org.yuzu.yuzu_emu.R
+import org.yuzu.yuzu_emu.features.settings.model.Setting
+import org.yuzu.yuzu_emu.features.settings.model.Settings
+import org.yuzu.yuzu_emu.features.settings.model.StringSetting
+import org.yuzu.yuzu_emu.features.settings.model.view.*
+import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
+
+class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) {
+ private var menuTag: String? = null
+ private lateinit var gameId: String
+ private var settings: Settings? = null
+ private var settingsList: ArrayList<SettingsItem>? = null
+
+ fun onCreate(menuTag: String, gameId: String) {
+ this.gameId = gameId
+ this.menuTag = menuTag
+ }
+
+ fun onViewCreated(settings: Settings?) {
+ setSettings(settings)
+ }
+
+ /**
+ * If the screen is rotated, the Activity will forget the settings map. This fragment
+ * won't, though; so rather than have the Activity reload from disk, have the fragment pass
+ * the settings map back to the Activity.
+ */
+ fun onAttach() {
+ if (settings != null) {
+ fragmentView.passSettingsToActivity(settings!!)
+ }
+ }
+
+ fun putSetting(setting: Setting) {
+ settings!!.getSection(setting.section)!!.putSetting(setting)
+ }
+
+ private fun asStringSetting(setting: Setting?): StringSetting? {
+ if (setting == null) {
+ return null
+ }
+ val stringSetting = StringSetting(setting.key, setting.section, setting.valueAsString)
+ putSetting(stringSetting)
+ return stringSetting
+ }
+
+ fun loadDefaultSettings() {
+ loadSettingsList()
+ }
+
+ fun setSettings(settings: Settings?) {
+ if (settingsList == null && settings != null) {
+ this.settings = settings
+ loadSettingsList()
+ } else {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_settings)
+ fragmentView.showSettingsList(settingsList!!)
+ }
+ }
+
+ private fun loadSettingsList() {
+ if (!TextUtils.isEmpty(gameId)) {
+ fragmentView.fragmentActivity.title = "Game Settings: $gameId"
+ }
+ val sl = ArrayList<SettingsItem>()
+ if (menuTag == null) {
+ return
+ }
+ when (menuTag) {
+ SettingsFile.FILE_NAME_CONFIG -> addConfigSettings(sl)
+ Settings.SECTION_GENERAL -> addGeneralSettings(sl)
+ Settings.SECTION_SYSTEM -> addSystemSettings(sl)
+ Settings.SECTION_RENDERER -> addGraphicsSettings(sl)
+ Settings.SECTION_AUDIO -> addAudioSettings(sl)
+ else -> {
+ fragmentView.showToastMessage("Unimplemented menu", false)
+ return
+ }
+ }
+ settingsList = sl
+ fragmentView.showSettingsList(settingsList!!)
+ }
+
+ private fun addConfigSettings(sl: ArrayList<SettingsItem>) {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_settings)
+ sl.apply {
+ add(
+ SubmenuSetting(
+ null,
+ null,
+ R.string.preferences_general,
+ 0,
+ Settings.SECTION_GENERAL
+ )
+ )
+ add(
+ SubmenuSetting(
+ null,
+ null,
+ R.string.preferences_system,
+ 0,
+ Settings.SECTION_SYSTEM
+ )
+ )
+ add(
+ SubmenuSetting(
+ null,
+ null,
+ R.string.preferences_graphics,
+ 0,
+ Settings.SECTION_RENDERER
+ )
+ )
+ add(
+ SubmenuSetting(
+ null,
+ null,
+ R.string.preferences_audio,
+ 0,
+ Settings.SECTION_AUDIO
+ )
+ )
+ }
+ }
+
+ private fun addGeneralSettings(sl: ArrayList<SettingsItem>) {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_general)
+ val rendererSection = settings!!.getSection(Settings.SECTION_RENDERER)
+ val frameLimitEnable =
+ rendererSection!!.getSetting(SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT)
+ val frameLimitValue = rendererSection.getSetting(SettingsFile.KEY_RENDERER_SPEED_LIMIT)
+ val cpuSection = settings!!.getSection(Settings.SECTION_CPU)
+ val cpuAccuracy = cpuSection!!.getSetting(SettingsFile.KEY_CPU_ACCURACY)
+ sl.apply {
+ add(
+ CheckBoxSetting(
+ SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT,
+ Settings.SECTION_RENDERER,
+ frameLimitEnable,
+ R.string.frame_limit_enable,
+ R.string.frame_limit_enable_description,
+ true
+ )
+ )
+ add(
+ SliderSetting(
+ SettingsFile.KEY_RENDERER_SPEED_LIMIT,
+ Settings.SECTION_RENDERER,
+ frameLimitValue,
+ R.string.frame_limit_slider,
+ R.string.frame_limit_slider_description,
+ 1,
+ 200,
+ "%",
+ 100
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_CPU_ACCURACY,
+ Settings.SECTION_CPU,
+ cpuAccuracy,
+ R.string.cpu_accuracy,
+ 0,
+ R.array.cpuAccuracyNames,
+ R.array.cpuAccuracyValues,
+ 0
+ )
+ )
+ }
+ }
+
+ private fun addSystemSettings(sl: ArrayList<SettingsItem>) {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_system)
+ val systemSection = settings!!.getSection(Settings.SECTION_SYSTEM)
+ val dockedMode = systemSection!!.getSetting(SettingsFile.KEY_USE_DOCKED_MODE)
+ val region = systemSection.getSetting(SettingsFile.KEY_REGION_INDEX)
+ val language = systemSection.getSetting(SettingsFile.KEY_LANGUAGE_INDEX)
+ sl.apply {
+ add(
+ CheckBoxSetting(
+ SettingsFile.KEY_USE_DOCKED_MODE,
+ Settings.SECTION_SYSTEM,
+ dockedMode,
+ R.string.use_docked_mode,
+ R.string.use_docked_mode_description,
+ true,
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_REGION_INDEX,
+ Settings.SECTION_SYSTEM,
+ region,
+ R.string.emulated_region,
+ 0,
+ R.array.regionNames,
+ R.array.regionValues,
+ -1
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_LANGUAGE_INDEX,
+ Settings.SECTION_SYSTEM,
+ language,
+ R.string.emulated_language,
+ 0,
+ R.array.languageNames,
+ R.array.languageValues,
+ 1
+ )
+ )
+ }
+ }
+
+ private fun addGraphicsSettings(sl: ArrayList<SettingsItem>) {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_graphics)
+ val rendererSection = settings!!.getSection(Settings.SECTION_RENDERER)
+ val rendererBackend = rendererSection!!.getSetting(SettingsFile.KEY_RENDERER_BACKEND)
+ val rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY)
+ val rendererResolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION)
+ val rendererAspectRatio =
+ rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO)
+ val rendererForceMaxClocks =
+ rendererSection.getSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK)
+ val rendererAsynchronousShaders =
+ rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS)
+ val rendererDebug = rendererSection.getSetting(SettingsFile.KEY_RENDERER_DEBUG)
+ sl.apply {
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_RENDERER_BACKEND,
+ Settings.SECTION_RENDERER,
+ rendererBackend,
+ R.string.renderer_api,
+ 0,
+ R.array.rendererApiNames,
+ R.array.rendererApiValues,
+ 1
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_RENDERER_ACCURACY,
+ Settings.SECTION_RENDERER,
+ rendererAccuracy,
+ R.string.renderer_accuracy,
+ 0,
+ R.array.rendererAccuracyNames,
+ R.array.rendererAccuracyValues,
+ 1
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_RENDERER_RESOLUTION,
+ Settings.SECTION_RENDERER,
+ rendererResolution,
+ R.string.renderer_resolution,
+ 0,
+ R.array.rendererResolutionNames,
+ R.array.rendererResolutionValues,
+ 2
+ )
+ )
+ add(
+ SingleChoiceSetting(
+ SettingsFile.KEY_RENDERER_ASPECT_RATIO,
+ Settings.SECTION_RENDERER,
+ rendererAspectRatio,
+ R.string.renderer_aspect_ratio,
+ 0,
+ R.array.rendererAspectRatioNames,
+ R.array.rendererAspectRatioValues,
+ 0
+ )
+ )
+ add(
+ CheckBoxSetting(
+ SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK,
+ Settings.SECTION_RENDERER,
+ rendererForceMaxClocks,
+ R.string.renderer_force_max_clock,
+ R.string.renderer_force_max_clock_description,
+ true
+ )
+ )
+ add(
+ CheckBoxSetting(
+ SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS,
+ Settings.SECTION_RENDERER,
+ rendererAsynchronousShaders,
+ R.string.renderer_asynchronous_shaders,
+ R.string.renderer_asynchronous_shaders_description,
+ false
+ )
+ )
+ add(
+ CheckBoxSetting(
+ SettingsFile.KEY_RENDERER_DEBUG,
+ Settings.SECTION_RENDERER,
+ rendererDebug,
+ R.string.renderer_debug,
+ R.string.renderer_debug_description,
+ false
+ )
+ )
+ }
+ }
+
+ private fun addAudioSettings(sl: ArrayList<SettingsItem>) {
+ fragmentView.fragmentActivity.setTitle(R.string.preferences_audio)
+ val audioSection = settings!!.getSection(Settings.SECTION_AUDIO)
+ val audioVolume = audioSection!!.getSetting(SettingsFile.KEY_AUDIO_VOLUME)
+ sl.add(
+ SliderSetting(
+ SettingsFile.KEY_AUDIO_VOLUME,
+ Settings.SECTION_AUDIO,
+ audioVolume,
+ R.string.audio_volume,
+ R.string.audio_volume_description,
+ 0,
+ 100,
+ "%",
+ 100
+ )
+ )
+ }
+}