summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-03-07 21:14:47 -0500
committerGravatar bunnei2023-06-03 00:05:38 -0700
commit14d156701f63685397d953cdd59570fbfcc7b098 (patch)
treee62a8ef02eea1845304a34a06c43508c29509863 /src/android
parentandroid: Convert SettingsFragment to Kotlin (diff)
downloadyuzu-14d156701f63685397d953cdd59570fbfcc7b098.tar.gz
yuzu-14d156701f63685397d953cdd59570fbfcc7b098.tar.xz
yuzu-14d156701f63685397d953cdd59570fbfcc7b098.zip
android: Convert SettingsFragmentPresenter to Kotlin
Diffstat (limited to 'src/android')
-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 @@
1package org.yuzu.yuzu_emu.features.settings.ui;
2
3import android.text.TextUtils;
4
5import org.yuzu.yuzu_emu.R;
6import org.yuzu.yuzu_emu.features.settings.model.Setting;
7import org.yuzu.yuzu_emu.features.settings.model.SettingSection;
8import org.yuzu.yuzu_emu.features.settings.model.Settings;
9import org.yuzu.yuzu_emu.features.settings.model.StringSetting;
10import org.yuzu.yuzu_emu.features.settings.model.view.CheckBoxSetting;
11import org.yuzu.yuzu_emu.features.settings.model.view.DateTimeSetting;
12import org.yuzu.yuzu_emu.features.settings.model.view.HeaderSetting;
13import org.yuzu.yuzu_emu.features.settings.model.view.SettingsItem;
14import org.yuzu.yuzu_emu.features.settings.model.view.SingleChoiceSetting;
15import org.yuzu.yuzu_emu.features.settings.model.view.SliderSetting;
16import org.yuzu.yuzu_emu.features.settings.model.view.SubmenuSetting;
17import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile;
18
19import java.util.ArrayList;
20
21public final class SettingsFragmentPresenter {
22 private SettingsFragmentView mView;
23
24 private String mMenuTag;
25 private String mGameID;
26
27 private Settings mSettings;
28 private ArrayList<SettingsItem> mSettingsList;
29
30 public SettingsFragmentPresenter(SettingsFragmentView view) {
31 mView = view;
32 }
33
34 public void onCreate(String menuTag, String gameId) {
35 mGameID = gameId;
36 mMenuTag = menuTag;
37 }
38
39 public void onViewCreated(Settings settings) {
40 setSettings(settings);
41 }
42
43 /**
44 * If the screen is rotated, the Activity will forget the settings map. This fragment
45 * won't, though; so rather than have the Activity reload from disk, have the fragment pass
46 * the settings map back to the Activity.
47 */
48 public void onAttach() {
49 if (mSettings != null) {
50 mView.passSettingsToActivity(mSettings);
51 }
52 }
53
54 public void putSetting(Setting setting) {
55 mSettings.getSection(setting.getSection()).putSetting(setting);
56 }
57
58 private StringSetting asStringSetting(Setting setting) {
59 if (setting == null) {
60 return null;
61 }
62
63 StringSetting stringSetting = new StringSetting(setting.getKey(), setting.getSection(), setting.getValueAsString());
64 putSetting(stringSetting);
65 return stringSetting;
66 }
67
68 public void loadDefaultSettings() {
69 loadSettingsList();
70 }
71
72 public void setSettings(Settings settings) {
73 if (mSettingsList == null && settings != null) {
74 mSettings = settings;
75
76 loadSettingsList();
77 } else {
78 mView.getActivity().setTitle(R.string.preferences_settings);
79 mView.showSettingsList(mSettingsList);
80 }
81 }
82
83 private void loadSettingsList() {
84 if (!TextUtils.isEmpty(mGameID)) {
85 mView.getActivity().setTitle("Game Settings: " + mGameID);
86 }
87 ArrayList<SettingsItem> sl = new ArrayList<>();
88
89 if (mMenuTag == null) {
90 return;
91 }
92
93 switch (mMenuTag) {
94 case SettingsFile.FILE_NAME_CONFIG:
95 addConfigSettings(sl);
96 break;
97 case Settings.SECTION_GENERAL:
98 addGeneralSettings(sl);
99 break;
100 case Settings.SECTION_SYSTEM:
101 addSystemSettings(sl);
102 break;
103 case Settings.SECTION_RENDERER:
104 addGraphicsSettings(sl);
105 break;
106 case Settings.SECTION_AUDIO:
107 addAudioSettings(sl);
108 break;
109 default:
110 mView.showToastMessage("Unimplemented menu", false);
111 return;
112 }
113
114 mSettingsList = sl;
115 mView.showSettingsList(mSettingsList);
116 }
117
118 private void addConfigSettings(ArrayList<SettingsItem> sl) {
119 mView.getActivity().setTitle(R.string.preferences_settings);
120
121 sl.add(new SubmenuSetting(null, null, R.string.preferences_general, 0, Settings.SECTION_GENERAL));
122 sl.add(new SubmenuSetting(null, null, R.string.preferences_system, 0, Settings.SECTION_SYSTEM));
123 sl.add(new SubmenuSetting(null, null, R.string.preferences_graphics, 0, Settings.SECTION_RENDERER));
124 sl.add(new SubmenuSetting(null, null, R.string.preferences_audio, 0, Settings.SECTION_AUDIO));
125 }
126
127 private void addGeneralSettings(ArrayList<SettingsItem> sl) {
128 mView.getActivity().setTitle(R.string.preferences_general);
129
130 SettingSection rendererSection = mSettings.getSection(Settings.SECTION_RENDERER);
131 Setting frameLimitEnable = rendererSection.getSetting(SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT);
132 Setting frameLimitValue = rendererSection.getSetting(SettingsFile.KEY_RENDERER_SPEED_LIMIT);
133
134 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));
135 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));
136
137 SettingSection cpuSection = mSettings.getSection(Settings.SECTION_CPU);
138 Setting cpuAccuracy = cpuSection.getSetting(SettingsFile.KEY_CPU_ACCURACY);
139 sl.add(new SingleChoiceSetting(SettingsFile.KEY_CPU_ACCURACY, Settings.SECTION_CPU, R.string.cpu_accuracy, 0, R.array.cpuAccuracyNames, R.array.cpuAccuracyValues, 0, cpuAccuracy));
140 }
141
142 private void addSystemSettings(ArrayList<SettingsItem> sl) {
143 mView.getActivity().setTitle(R.string.preferences_system);
144
145 SettingSection systemSection = mSettings.getSection(Settings.SECTION_SYSTEM);
146 Setting dockedMode = systemSection.getSetting(SettingsFile.KEY_USE_DOCKED_MODE);
147 Setting region = systemSection.getSetting(SettingsFile.KEY_REGION_INDEX);
148 Setting language = systemSection.getSetting(SettingsFile.KEY_LANGUAGE_INDEX);
149
150 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));
151 sl.add(new SingleChoiceSetting(SettingsFile.KEY_REGION_INDEX, Settings.SECTION_SYSTEM, R.string.emulated_region, 0, R.array.regionNames, R.array.regionValues, -1, region));
152 sl.add(new SingleChoiceSetting(SettingsFile.KEY_LANGUAGE_INDEX, Settings.SECTION_SYSTEM, R.string.emulated_language, 0, R.array.languageNames, R.array.languageValues, 1, language));
153 }
154
155 private void addGraphicsSettings(ArrayList<SettingsItem> sl) {
156 mView.getActivity().setTitle(R.string.preferences_graphics);
157
158 SettingSection rendererSection = mSettings.getSection(Settings.SECTION_RENDERER);
159 Setting rendererBackend = rendererSection.getSetting(SettingsFile.KEY_RENDERER_BACKEND);
160 Setting rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY);
161 Setting rendererReolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION);
162 Setting rendererAspectRation = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO);
163 Setting rendererForceMaxClocks = rendererSection.getSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK);
164 Setting rendererAsynchronousShaders = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS);
165 Setting rendererDebug = rendererSection.getSetting(SettingsFile.KEY_RENDERER_DEBUG);
166
167 sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_BACKEND, Settings.SECTION_RENDERER, R.string.renderer_api, 0, R.array.rendererApiNames, R.array.rendererApiValues, 1, rendererBackend));
168 sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_ACCURACY, Settings.SECTION_RENDERER, R.string.renderer_accuracy, 0, R.array.rendererAccuracyNames, R.array.rendererAccuracyValues, 1, rendererAccuracy));
169 sl.add(new SingleChoiceSetting(SettingsFile.KEY_RENDERER_RESOLUTION, Settings.SECTION_RENDERER, R.string.renderer_resolution, 0, R.array.rendererResolutionNames, R.array.rendererResolutionValues, 2, rendererReolution));
170 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));
171 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));
172 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));
173 sl.add(new CheckBoxSetting(SettingsFile.KEY_RENDERER_DEBUG, Settings.SECTION_RENDERER, R.string.renderer_debug, R.string.renderer_debug_description, false, rendererDebug));
174 }
175
176 private void addAudioSettings(ArrayList<SettingsItem> sl) {
177 mView.getActivity().setTitle(R.string.preferences_audio);
178
179 SettingSection audioSection = mSettings.getSection(Settings.SECTION_AUDIO);
180 Setting audioVolume = audioSection.getSetting(SettingsFile.KEY_AUDIO_VOLUME);
181
182 sl.add(new SliderSetting(SettingsFile.KEY_AUDIO_VOLUME, Settings.SECTION_AUDIO, R.string.audio_volume, R.string.audio_volume_description, 0, 100, "%", 100, audioVolume));
183 }
184}
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 @@
1package org.yuzu.yuzu_emu.features.settings.ui
2
3import android.text.TextUtils
4import org.yuzu.yuzu_emu.R
5import org.yuzu.yuzu_emu.features.settings.model.Setting
6import org.yuzu.yuzu_emu.features.settings.model.Settings
7import org.yuzu.yuzu_emu.features.settings.model.StringSetting
8import org.yuzu.yuzu_emu.features.settings.model.view.*
9import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
10
11class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) {
12 private var menuTag: String? = null
13 private lateinit var gameId: String
14 private var settings: Settings? = null
15 private var settingsList: ArrayList<SettingsItem>? = null
16
17 fun onCreate(menuTag: String, gameId: String) {
18 this.gameId = gameId
19 this.menuTag = menuTag
20 }
21
22 fun onViewCreated(settings: Settings?) {
23 setSettings(settings)
24 }
25
26 /**
27 * If the screen is rotated, the Activity will forget the settings map. This fragment
28 * won't, though; so rather than have the Activity reload from disk, have the fragment pass
29 * the settings map back to the Activity.
30 */
31 fun onAttach() {
32 if (settings != null) {
33 fragmentView.passSettingsToActivity(settings!!)
34 }
35 }
36
37 fun putSetting(setting: Setting) {
38 settings!!.getSection(setting.section)!!.putSetting(setting)
39 }
40
41 private fun asStringSetting(setting: Setting?): StringSetting? {
42 if (setting == null) {
43 return null
44 }
45 val stringSetting = StringSetting(setting.key, setting.section, setting.valueAsString)
46 putSetting(stringSetting)
47 return stringSetting
48 }
49
50 fun loadDefaultSettings() {
51 loadSettingsList()
52 }
53
54 fun setSettings(settings: Settings?) {
55 if (settingsList == null && settings != null) {
56 this.settings = settings
57 loadSettingsList()
58 } else {
59 fragmentView.fragmentActivity.setTitle(R.string.preferences_settings)
60 fragmentView.showSettingsList(settingsList!!)
61 }
62 }
63
64 private fun loadSettingsList() {
65 if (!TextUtils.isEmpty(gameId)) {
66 fragmentView.fragmentActivity.title = "Game Settings: $gameId"
67 }
68 val sl = ArrayList<SettingsItem>()
69 if (menuTag == null) {
70 return
71 }
72 when (menuTag) {
73 SettingsFile.FILE_NAME_CONFIG -> addConfigSettings(sl)
74 Settings.SECTION_GENERAL -> addGeneralSettings(sl)
75 Settings.SECTION_SYSTEM -> addSystemSettings(sl)
76 Settings.SECTION_RENDERER -> addGraphicsSettings(sl)
77 Settings.SECTION_AUDIO -> addAudioSettings(sl)
78 else -> {
79 fragmentView.showToastMessage("Unimplemented menu", false)
80 return
81 }
82 }
83 settingsList = sl
84 fragmentView.showSettingsList(settingsList!!)
85 }
86
87 private fun addConfigSettings(sl: ArrayList<SettingsItem>) {
88 fragmentView.fragmentActivity.setTitle(R.string.preferences_settings)
89 sl.apply {
90 add(
91 SubmenuSetting(
92 null,
93 null,
94 R.string.preferences_general,
95 0,
96 Settings.SECTION_GENERAL
97 )
98 )
99 add(
100 SubmenuSetting(
101 null,
102 null,
103 R.string.preferences_system,
104 0,
105 Settings.SECTION_SYSTEM
106 )
107 )
108 add(
109 SubmenuSetting(
110 null,
111 null,
112 R.string.preferences_graphics,
113 0,
114 Settings.SECTION_RENDERER
115 )
116 )
117 add(
118 SubmenuSetting(
119 null,
120 null,
121 R.string.preferences_audio,
122 0,
123 Settings.SECTION_AUDIO
124 )
125 )
126 }
127 }
128
129 private fun addGeneralSettings(sl: ArrayList<SettingsItem>) {
130 fragmentView.fragmentActivity.setTitle(R.string.preferences_general)
131 val rendererSection = settings!!.getSection(Settings.SECTION_RENDERER)
132 val frameLimitEnable =
133 rendererSection!!.getSetting(SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT)
134 val frameLimitValue = rendererSection.getSetting(SettingsFile.KEY_RENDERER_SPEED_LIMIT)
135 val cpuSection = settings!!.getSection(Settings.SECTION_CPU)
136 val cpuAccuracy = cpuSection!!.getSetting(SettingsFile.KEY_CPU_ACCURACY)
137 sl.apply {
138 add(
139 CheckBoxSetting(
140 SettingsFile.KEY_RENDERER_USE_SPEED_LIMIT,
141 Settings.SECTION_RENDERER,
142 frameLimitEnable,
143 R.string.frame_limit_enable,
144 R.string.frame_limit_enable_description,
145 true
146 )
147 )
148 add(
149 SliderSetting(
150 SettingsFile.KEY_RENDERER_SPEED_LIMIT,
151 Settings.SECTION_RENDERER,
152 frameLimitValue,
153 R.string.frame_limit_slider,
154 R.string.frame_limit_slider_description,
155 1,
156 200,
157 "%",
158 100
159 )
160 )
161 add(
162 SingleChoiceSetting(
163 SettingsFile.KEY_CPU_ACCURACY,
164 Settings.SECTION_CPU,
165 cpuAccuracy,
166 R.string.cpu_accuracy,
167 0,
168 R.array.cpuAccuracyNames,
169 R.array.cpuAccuracyValues,
170 0
171 )
172 )
173 }
174 }
175
176 private fun addSystemSettings(sl: ArrayList<SettingsItem>) {
177 fragmentView.fragmentActivity.setTitle(R.string.preferences_system)
178 val systemSection = settings!!.getSection(Settings.SECTION_SYSTEM)
179 val dockedMode = systemSection!!.getSetting(SettingsFile.KEY_USE_DOCKED_MODE)
180 val region = systemSection.getSetting(SettingsFile.KEY_REGION_INDEX)
181 val language = systemSection.getSetting(SettingsFile.KEY_LANGUAGE_INDEX)
182 sl.apply {
183 add(
184 CheckBoxSetting(
185 SettingsFile.KEY_USE_DOCKED_MODE,
186 Settings.SECTION_SYSTEM,
187 dockedMode,
188 R.string.use_docked_mode,
189 R.string.use_docked_mode_description,
190 true,
191 )
192 )
193 add(
194 SingleChoiceSetting(
195 SettingsFile.KEY_REGION_INDEX,
196 Settings.SECTION_SYSTEM,
197 region,
198 R.string.emulated_region,
199 0,
200 R.array.regionNames,
201 R.array.regionValues,
202 -1
203 )
204 )
205 add(
206 SingleChoiceSetting(
207 SettingsFile.KEY_LANGUAGE_INDEX,
208 Settings.SECTION_SYSTEM,
209 language,
210 R.string.emulated_language,
211 0,
212 R.array.languageNames,
213 R.array.languageValues,
214 1
215 )
216 )
217 }
218 }
219
220 private fun addGraphicsSettings(sl: ArrayList<SettingsItem>) {
221 fragmentView.fragmentActivity.setTitle(R.string.preferences_graphics)
222 val rendererSection = settings!!.getSection(Settings.SECTION_RENDERER)
223 val rendererBackend = rendererSection!!.getSetting(SettingsFile.KEY_RENDERER_BACKEND)
224 val rendererAccuracy = rendererSection.getSetting(SettingsFile.KEY_RENDERER_ACCURACY)
225 val rendererResolution = rendererSection.getSetting(SettingsFile.KEY_RENDERER_RESOLUTION)
226 val rendererAspectRatio =
227 rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASPECT_RATIO)
228 val rendererForceMaxClocks =
229 rendererSection.getSetting(SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK)
230 val rendererAsynchronousShaders =
231 rendererSection.getSetting(SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS)
232 val rendererDebug = rendererSection.getSetting(SettingsFile.KEY_RENDERER_DEBUG)
233 sl.apply {
234 add(
235 SingleChoiceSetting(
236 SettingsFile.KEY_RENDERER_BACKEND,
237 Settings.SECTION_RENDERER,
238 rendererBackend,
239 R.string.renderer_api,
240 0,
241 R.array.rendererApiNames,
242 R.array.rendererApiValues,
243 1
244 )
245 )
246 add(
247 SingleChoiceSetting(
248 SettingsFile.KEY_RENDERER_ACCURACY,
249 Settings.SECTION_RENDERER,
250 rendererAccuracy,
251 R.string.renderer_accuracy,
252 0,
253 R.array.rendererAccuracyNames,
254 R.array.rendererAccuracyValues,
255 1
256 )
257 )
258 add(
259 SingleChoiceSetting(
260 SettingsFile.KEY_RENDERER_RESOLUTION,
261 Settings.SECTION_RENDERER,
262 rendererResolution,
263 R.string.renderer_resolution,
264 0,
265 R.array.rendererResolutionNames,
266 R.array.rendererResolutionValues,
267 2
268 )
269 )
270 add(
271 SingleChoiceSetting(
272 SettingsFile.KEY_RENDERER_ASPECT_RATIO,
273 Settings.SECTION_RENDERER,
274 rendererAspectRatio,
275 R.string.renderer_aspect_ratio,
276 0,
277 R.array.rendererAspectRatioNames,
278 R.array.rendererAspectRatioValues,
279 0
280 )
281 )
282 add(
283 CheckBoxSetting(
284 SettingsFile.KEY_RENDERER_FORCE_MAX_CLOCK,
285 Settings.SECTION_RENDERER,
286 rendererForceMaxClocks,
287 R.string.renderer_force_max_clock,
288 R.string.renderer_force_max_clock_description,
289 true
290 )
291 )
292 add(
293 CheckBoxSetting(
294 SettingsFile.KEY_RENDERER_ASYNCHRONOUS_SHADERS,
295 Settings.SECTION_RENDERER,
296 rendererAsynchronousShaders,
297 R.string.renderer_asynchronous_shaders,
298 R.string.renderer_asynchronous_shaders_description,
299 false
300 )
301 )
302 add(
303 CheckBoxSetting(
304 SettingsFile.KEY_RENDERER_DEBUG,
305 Settings.SECTION_RENDERER,
306 rendererDebug,
307 R.string.renderer_debug,
308 R.string.renderer_debug_description,
309 false
310 )
311 )
312 }
313 }
314
315 private fun addAudioSettings(sl: ArrayList<SettingsItem>) {
316 fragmentView.fragmentActivity.setTitle(R.string.preferences_audio)
317 val audioSection = settings!!.getSection(Settings.SECTION_AUDIO)
318 val audioVolume = audioSection!!.getSetting(SettingsFile.KEY_AUDIO_VOLUME)
319 sl.add(
320 SliderSetting(
321 SettingsFile.KEY_AUDIO_VOLUME,
322 Settings.SECTION_AUDIO,
323 audioVolume,
324 R.string.audio_volume,
325 R.string.audio_volume_description,
326 0,
327 100,
328 "%",
329 100
330 )
331 )
332 }
333}