committed by
bunnei
2 changed files with 145 additions and 127 deletions
-
127src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.java
-
145src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
@ -1,127 +0,0 @@ |
|||
package org.yuzu.yuzu_emu.features.settings.model; |
|||
|
|||
import android.text.TextUtils; |
|||
|
|||
import org.yuzu.yuzu_emu.YuzuApplication; |
|||
import org.yuzu.yuzu_emu.R; |
|||
import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivityView; |
|||
import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.TreeMap; |
|||
|
|||
public class Settings { |
|||
public static final String SECTION_GENERAL = "General"; |
|||
public static final String SECTION_SYSTEM = "System"; |
|||
public static final String SECTION_RENDERER = "Renderer"; |
|||
public static final String SECTION_AUDIO = "Audio"; |
|||
public static final String SECTION_CPU = "Cpu"; |
|||
|
|||
private String gameId; |
|||
|
|||
private static final Map<String, List<String>> configFileSectionsMap = new HashMap<>(); |
|||
|
|||
static { |
|||
configFileSectionsMap.put(SettingsFile.FILE_NAME_CONFIG, Arrays.asList(SECTION_GENERAL, SECTION_SYSTEM, SECTION_RENDERER, SECTION_AUDIO, SECTION_CPU)); |
|||
} |
|||
|
|||
/** |
|||
* A HashMap<String, SettingSection> that constructs a new SettingSection instead of returning null |
|||
* when getting a key not already in the map |
|||
*/ |
|||
public static final class SettingsSectionMap extends HashMap<String, SettingSection> { |
|||
@Override |
|||
public SettingSection get(Object key) { |
|||
if (!(key instanceof String)) { |
|||
return null; |
|||
} |
|||
|
|||
String stringKey = (String) key; |
|||
|
|||
if (!super.containsKey(stringKey)) { |
|||
SettingSection section = new SettingSection(stringKey); |
|||
super.put(stringKey, section); |
|||
return section; |
|||
} |
|||
return super.get(key); |
|||
} |
|||
} |
|||
|
|||
private HashMap<String, SettingSection> sections = new Settings.SettingsSectionMap(); |
|||
|
|||
public SettingSection getSection(String sectionName) { |
|||
return sections.get(sectionName); |
|||
} |
|||
|
|||
public boolean isEmpty() { |
|||
return sections.isEmpty(); |
|||
} |
|||
|
|||
public HashMap<String, SettingSection> getSections() { |
|||
return sections; |
|||
} |
|||
|
|||
public void loadSettings(SettingsActivityView view) { |
|||
sections = new Settings.SettingsSectionMap(); |
|||
loadCitraSettings(view); |
|||
|
|||
if (!TextUtils.isEmpty(gameId)) { |
|||
loadCustomGameSettings(gameId, view); |
|||
} |
|||
} |
|||
|
|||
private void loadCitraSettings(SettingsActivityView view) { |
|||
for (Map.Entry<String, List<String>> entry : configFileSectionsMap.entrySet()) { |
|||
String fileName = entry.getKey(); |
|||
sections.putAll(SettingsFile.readFile(fileName, view)); |
|||
} |
|||
} |
|||
|
|||
private void loadCustomGameSettings(String gameId, SettingsActivityView view) { |
|||
// custom game settings |
|||
mergeSections(SettingsFile.readCustomGameSettings(gameId, view)); |
|||
} |
|||
|
|||
private void mergeSections(HashMap<String, SettingSection> updatedSections) { |
|||
for (Map.Entry<String, SettingSection> entry : updatedSections.entrySet()) { |
|||
if (sections.containsKey(entry.getKey())) { |
|||
SettingSection originalSection = sections.get(entry.getKey()); |
|||
SettingSection updatedSection = entry.getValue(); |
|||
originalSection.mergeSection(updatedSection); |
|||
} else { |
|||
sections.put(entry.getKey(), entry.getValue()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void loadSettings(String gameId, SettingsActivityView view) { |
|||
this.gameId = gameId; |
|||
loadSettings(view); |
|||
} |
|||
|
|||
public void saveSettings(SettingsActivityView view) { |
|||
if (TextUtils.isEmpty(gameId)) { |
|||
view.showToastMessage(YuzuApplication.getAppContext().getString(R.string.ini_saved), false); |
|||
|
|||
for (Map.Entry<String, List<String>> entry : configFileSectionsMap.entrySet()) { |
|||
String fileName = entry.getKey(); |
|||
List<String> sectionNames = entry.getValue(); |
|||
TreeMap<String, SettingSection> iniSections = new TreeMap<>(); |
|||
for (String section : sectionNames) { |
|||
iniSections.put(section, sections.get(section)); |
|||
} |
|||
|
|||
SettingsFile.saveFile(fileName, iniSections, view); |
|||
} |
|||
} else { |
|||
// custom game settings |
|||
view.showToastMessage(YuzuApplication.getAppContext().getString(R.string.gameid_saved, gameId), false); |
|||
|
|||
SettingsFile.saveCustomGameSettings(gameId, sections); |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,145 @@ |
|||
package org.yuzu.yuzu_emu.features.settings.model |
|||
|
|||
import android.text.TextUtils |
|||
import org.yuzu.yuzu_emu.R |
|||
import org.yuzu.yuzu_emu.YuzuApplication |
|||
import org.yuzu.yuzu_emu.features.settings.ui.SettingsActivityView |
|||
import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile |
|||
import java.util.* |
|||
|
|||
class Settings { |
|||
private var gameId: String? = null |
|||
|
|||
/** |
|||
* A HashMap<String></String>, SettingSection> that constructs a new SettingSection instead of returning null |
|||
* when getting a key not already in the map |
|||
*/ |
|||
class SettingsSectionMap : HashMap<String, SettingSection?>() { |
|||
override operator fun get(key: String): SettingSection? { |
|||
if (!super.containsKey(key)) { |
|||
val section = SettingSection(key) |
|||
super.put(key, section) |
|||
return section |
|||
} |
|||
return super.get(key) |
|||
} |
|||
} |
|||
|
|||
var sections: HashMap<String, SettingSection?> = SettingsSectionMap() |
|||
|
|||
fun getSection(sectionName: String): SettingSection? { |
|||
return sections[sectionName] |
|||
} |
|||
|
|||
val isEmpty: Boolean |
|||
get() = sections.isEmpty() |
|||
|
|||
fun loadSettings(view: SettingsActivityView) { |
|||
sections = SettingsSectionMap() |
|||
loadYuzuSettings(view) |
|||
if (!TextUtils.isEmpty(gameId)) { |
|||
loadCustomGameSettings(gameId!!, view) |
|||
} |
|||
} |
|||
|
|||
private fun loadYuzuSettings(view: SettingsActivityView) { |
|||
for ((fileName) in configFileSectionsMap) { |
|||
sections.putAll(SettingsFile.readFile(fileName, view)) |
|||
} |
|||
} |
|||
|
|||
private fun loadCustomGameSettings(gameId: String, view: SettingsActivityView) { |
|||
// Custom game settings |
|||
mergeSections(SettingsFile.readCustomGameSettings(gameId, view)) |
|||
} |
|||
|
|||
private fun mergeSections(updatedSections: HashMap<String, SettingSection?>) { |
|||
for ((key, updatedSection) in updatedSections) { |
|||
if (sections.containsKey(key)) { |
|||
val originalSection = sections[key] |
|||
originalSection!!.mergeSection(updatedSection!!) |
|||
} else { |
|||
sections[key] = updatedSection |
|||
} |
|||
} |
|||
} |
|||
|
|||
fun loadSettings(gameId: String, view: SettingsActivityView) { |
|||
this.gameId = gameId |
|||
loadSettings(view) |
|||
} |
|||
|
|||
fun saveSettings(view: SettingsActivityView) { |
|||
if (TextUtils.isEmpty(gameId)) { |
|||
view.showToastMessage( |
|||
YuzuApplication.appContext.getString(R.string.ini_saved), |
|||
false |
|||
) |
|||
|
|||
for ((fileName, sectionNames) in configFileSectionsMap) { |
|||
val iniSections = TreeMap<String, SettingSection>() |
|||
for (section in sectionNames) { |
|||
iniSections[section] = sections[section]!! |
|||
} |
|||
|
|||
SettingsFile.saveFile(fileName, iniSections, view) |
|||
} |
|||
} else { |
|||
// Custom game settings |
|||
view.showToastMessage( |
|||
YuzuApplication.appContext.getString(R.string.gameid_saved, gameId), |
|||
false |
|||
) |
|||
|
|||
SettingsFile.saveCustomGameSettings(gameId, sections) |
|||
} |
|||
} |
|||
|
|||
companion object { |
|||
const val SECTION_GENERAL = "General" |
|||
const val SECTION_SYSTEM = "System" |
|||
const val SECTION_RENDERER = "Renderer" |
|||
const val SECTION_AUDIO = "Audio" |
|||
const val SECTION_CPU = "Cpu" |
|||
|
|||
const val PREF_OVERLAY_INIT = "OverlayInit" |
|||
const val PREF_CONTROL_SCALE = "controlScale" |
|||
const val PREF_TOUCH_ENABLED = "isTouchEnabled" |
|||
const val PREF_BUTTON_TOGGLE_0 = "buttonToggleO" |
|||
const val PREF_BUTTON_TOGGLE_1 = "buttonToggle1" |
|||
const val PREF_BUTTON_TOGGLE_2 = "buttonToggle2" |
|||
const val PREF_BUTTON_TOGGLE_3 = "buttonToggle3" |
|||
const val PREF_BUTTON_TOGGLE_4 = "buttonToggle4" |
|||
const val PREF_BUTTON_TOGGLE_5 = "buttonToggle5" |
|||
const val PREF_BUTTON_TOGGLE_6 = "buttonToggle6" |
|||
const val PREF_BUTTON_TOGGLE_7 = "buttonToggle7" |
|||
const val PREF_BUTTON_TOGGLE_8 = "buttonToggle8" |
|||
const val PREF_BUTTON_TOGGLE_9 = "buttonToggle9" |
|||
const val PREF_BUTTON_TOGGLE_10 = "buttonToggle10" |
|||
const val PREF_BUTTON_TOGGLE_11 = "buttonToggle11" |
|||
const val PREF_BUTTON_TOGGLE_12 = "buttonToggle12" |
|||
const val PREF_BUTTON_TOGGLE_13 = "buttonToggle13" |
|||
const val PREF_BUTTON_TOGGLE_14 = "buttonToggle14" |
|||
|
|||
const val PREF_MENU_SETTINGS_JOYSTICK_REL_CENTER = "EmulationMenuSettings_JoystickRelCenter" |
|||
const val PREF_MENU_SETTINGS_DPAD_SLIDE = "EmulationMenuSettings_DpadSlideEnable" |
|||
const val PREF_MENU_SETTINGS_LANDSCAPE = "EmulationMenuSettings_LandscapeScreenLayout" |
|||
const val PREF_MENU_SETTINGS_SHOW_FPS = "EmulationMenuSettings_ShowFps" |
|||
const val PREF_MENU_SETTINGS_SHOW_OVERLAY = "EmulationMenuSettings_ShowOverlay" |
|||
|
|||
const val PREF_FIRST_APP_LAUNCH = "FirstApplicationLaunch" |
|||
|
|||
private val configFileSectionsMap: MutableMap<String, List<String>> = HashMap() |
|||
|
|||
init { |
|||
configFileSectionsMap[SettingsFile.FILE_NAME_CONFIG] = |
|||
listOf( |
|||
SECTION_GENERAL, |
|||
SECTION_SYSTEM, |
|||
SECTION_RENDERER, |
|||
SECTION_AUDIO, |
|||
SECTION_CPU |
|||
) |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue