summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/SettingSection.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java57
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java60
3 files changed, 102 insertions, 23 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/SettingSection.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/SettingSection.java
index 25d07a3dad..1263d3a95a 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/SettingSection.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/SettingSection.java
@@ -52,4 +52,12 @@ public final class SettingSection
{
return mSettings;
}
+
+ public void mergeSection(SettingSection settingSection)
+ {
+ for (Setting setting : settingSection.mSettings.values())
+ {
+ putSetting(setting);
+ }
+ }
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
index d2ea2716eb..5d960a3b9f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
@@ -7,6 +7,7 @@ import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -83,18 +84,62 @@ public class Settings
public void loadSettings(SettingsActivityView view)
{
sections = new Settings.SettingsSectionMap();
- if (TextUtils.isEmpty(gameId))
+
+ HashSet<String> filesToExclude = new HashSet<>();
+ if (!TextUtils.isEmpty(gameId))
{
- for (Map.Entry<String, List<String>> entry : configFileSectionsMap.entrySet())
+ // for per-game settings, don't load the WiiMoteNew.ini settings
+ filesToExclude.add(SettingsFile.FILE_NAME_WIIMOTE);
+ }
+
+ loadDolphinSettings(view, filesToExclude);
+
+ if (!TextUtils.isEmpty(gameId))
+ {
+ loadGenericGameSettings(gameId, view);
+ loadCustomGameSettings(gameId, view);
+ }
+ }
+
+ private void loadDolphinSettings(SettingsActivityView view, HashSet<String> filesToExclude)
+ {
+ for (Map.Entry<String, List<String>> entry : configFileSectionsMap.entrySet())
+ {
+ String fileName = entry.getKey();
+ if(filesToExclude == null || !filesToExclude.contains(fileName))
{
- String fileName = entry.getKey();
sections.putAll(SettingsFile.readFile(fileName, view));
}
}
- else
+ }
+
+ private void loadGenericGameSettings(String gameId, SettingsActivityView view)
+ {
+ // generic game settings
+ mergeSections(SettingsFile.readGenericGameSettings(gameId, view));
+ mergeSections(SettingsFile.readGenericGameSettingsForAllRegions(gameId, 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())
{
- // custom game settings
- sections.putAll(SettingsFile.readCustomGameSettings(gameId, view));
+ 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());
+ }
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
index 616d4fa4f5..2260b413f7 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
@@ -260,16 +260,13 @@ public final class SettingsFile
* effectively a HashMap of key/value settings. If unsuccessful, outputs an error telling why it
* failed.
*
- * @param fileName The name of the settings file without a path or extension.
- * @param view The current view.
- * @return An Observable that emits a HashMap of the file's contents, then completes.
+ * @param ini The ini file to load the settings from
+ * @param view The current view.
*/
- static HashMap<String, SettingSection> readFile(final String fileName, boolean isCustomGame, SettingsActivityView view)
+ static HashMap<String, SettingSection> readFile(final File ini, boolean isCustomGame, SettingsActivityView view)
{
HashMap<String, SettingSection> sections = new Settings.SettingsSectionMap();
- File ini = getSettingsFile(fileName);
-
BufferedReader reader = null;
try
@@ -296,12 +293,12 @@ public final class SettingsFile
}
catch (FileNotFoundException e)
{
- Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage());
+ Log.error("[SettingsFile] File not found: " + ini.getAbsolutePath() + e.getMessage());
view.onSettingsFileNotFound();
}
catch (IOException e)
{
- Log.error("[SettingsFile] Error reading from: " + fileName + ".ini: " + e.getMessage());
+ Log.error("[SettingsFile] Error reading from: " + ini.getAbsolutePath()+ e.getMessage());
view.onSettingsFileNotFound();
}
finally
@@ -314,22 +311,24 @@ public final class SettingsFile
}
catch (IOException e)
{
- Log.error("[SettingsFile] Error closing: " + fileName + ".ini: " + e.getMessage());
+ Log.error("[SettingsFile] Error closing: " + ini.getAbsolutePath()+ e.getMessage());
}
}
}
- if (fileName.equals(SettingsFile.FILE_NAME_DOLPHIN))
- {
- addGcPadSettingsIfTheyDontExist(sections);
- }
-
return sections;
}
public static HashMap<String, SettingSection> readFile(final String fileName, SettingsActivityView view)
{
- return readFile(fileName, false, view);
+ HashMap<String, SettingSection> sections = readFile(getSettingsFile(fileName), false, view);
+
+ if (fileName.equals(SettingsFile.FILE_NAME_DOLPHIN))
+ {
+ addGcPadSettingsIfTheyDontExist(sections);
+ }
+
+ return sections;
}
/**
@@ -342,10 +341,20 @@ public final class SettingsFile
*/
public static HashMap<String, SettingSection> readCustomGameSettings(final String gameId, SettingsActivityView view)
{
- String fileName = "../GameSettings/" + gameId;
- return readFile(fileName, true, view);
+ return readFile(getCustomGameSettingsFile(gameId), true, view);
}
+ public static HashMap<String, SettingSection> readGenericGameSettings(final String gameId, SettingsActivityView view)
+ {
+ return readFile(getGenericGameSettingsFile(gameId), true, view);
+ }
+
+ public static HashMap<String, SettingSection> readGenericGameSettingsForAllRegions(final String gameId, SettingsActivityView view)
+ {
+ return readFile(getGenericGameSettingsForAllRegions(gameId), true, view);
+ }
+
+
/**
* Saves a Settings HashMap to a given .ini file on disk. If unsuccessful, outputs an error
* telling why it failed.
@@ -436,6 +445,23 @@ public final class SettingsFile
return new File(DirectoryInitializationService.getUserDirectory() + "/Config/" + fileName + ".ini");
}
+ private static File getGenericGameSettingsForAllRegions(String gameId)
+ {
+ // Use the first 3 chars from the gameId to load the generic game settings for all regions
+ gameId = gameId.substring(0, 3);
+ return new File(DirectoryInitializationService.getDolphinInternalDirectory() + "/GameSettings/" + gameId + ".ini");
+ }
+
+ private static File getGenericGameSettingsFile(String gameId)
+ {
+ return new File(DirectoryInitializationService.getDolphinInternalDirectory() + "/GameSettings/" + gameId + ".ini");
+ }
+
+ private static File getCustomGameSettingsFile(String gameId)
+ {
+ return new File(DirectoryInitializationService.getUserDirectory() + "/GameSettings/" + gameId + ".ini");
+ }
+
private static SettingSection sectionFromLine(String line, boolean isCustomGame)
{
String sectionName = line.substring(1, line.length() - 1);