summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorzackhow <zackhow@gmail.com>2018-09-24 21:07:56 -0400
committerzackhow <zackhow@gmail.com>2018-10-28 20:22:06 -0400
commit405b37deaa4b59659906d709dbe7a220cc875b74 (patch)
treee9d956ddd1cc3d91c511f344bf81570fc16d6908 /Source/Android/app/src/main/java
parent5d93a10c60f25acd4f9045234156fd68720b1a87 (diff)
Android: Speed up game settings saving
Previously would take several seconds to save, sometimes causing ANRs, which was made worse when adding all the controller values. Now we only load/save each section instead of doing it for each setting. Also added a method to save an individual setting.
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java48
2 files changed, 41 insertions, 11 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 933ba04285..425a749d75 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -244,6 +244,10 @@ public final class NativeLibrary
Rumble.checkRumble(padID, state);
}
+ public static native void LoadGameIniFile(String gameId);
+
+ public static native void SaveGameIniFile(String gameId);
+
public static native String GetUserSetting(String gameID, String Section, String Key);
public static native void SetUserSetting(String gameID, String Section, String Key, String Value);
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 4592011443..04b36cb84f 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
@@ -443,13 +443,27 @@ public final class SettingsFile
HashMap<String, Setting> settings = section.getSettings();
Set<String> sortedKeySet = new TreeSet<>(settings.keySet());
+ // Profile options(wii extension) are not saved, only used to properly display values
+ if (sectionKey.contains(Settings.SECTION_PROFILE))
+ {
+ continue;
+ }
+ else
+ {
+ NativeLibrary.LoadGameIniFile(gameId);
+ }
for (String settingKey : sortedKeySet)
{
Setting setting = settings.get(settingKey);
// Special case. Extension gets saved into a controller profile
if (settingKey.contains(SettingsFile.KEY_WIIMOTE_EXTENSION))
{
- saveCustomWiimoteSetting(gameId, setting);
+ String padId =
+ setting.getKey()
+ .substring(setting.getKey().length() - 1, setting.getKey().length());
+
+ saveCustomWiimoteSetting(gameId, KEY_WIIMOTE_EXTENSION, setting.getValueAsString(),
+ padId);
}
else
{
@@ -457,30 +471,42 @@ public final class SettingsFile
setting.getKey(), setting.getValueAsString());
}
}
+ NativeLibrary.SaveGameIniFile(gameId);
}
}
+ public static void saveSingleCustomSetting(final String gameId, final String section,
+ final String key,
+ final String value)
+ {
+ NativeLibrary.LoadGameIniFile(gameId);
+ NativeLibrary.SetUserSetting(gameId, section,
+ key, value);
+ NativeLibrary.SaveGameIniFile(gameId);
+ }
+
/**
- * Saves the extension value in a profile and enables that profile. Extension is the only
- * controller setting that is not saved in the main config.
+ * Saves the wiimote setting in a profile and enables that profile.
*
* @param gameId
- * @param setting
+ * @param key
+ * @param value
+ * @param padId
*/
- public static void saveCustomWiimoteSetting(final String gameId, final Setting setting)
+ public static void saveCustomWiimoteSetting(final String gameId, final String key,
+ final String value,
+ final String padId)
{
- if (setting.getSection().equals(Settings.SECTION_PROFILE))
- return;
- String padId =
- setting.getKey().substring(setting.getKey().length() - 1, setting.getKey().length());
String profile = gameId + "_Wii" + padId;
- NativeLibrary.SetProfileSetting(profile, Settings.SECTION_PROFILE, KEY_WIIMOTE_EXTENSION,
- setting.getValueAsString());
+ NativeLibrary.SetProfileSetting(profile, Settings.SECTION_PROFILE, key,
+ value);
// Enable the profile
+ NativeLibrary.LoadGameIniFile(gameId);
NativeLibrary.SetUserSetting(gameId, Settings.SECTION_CONTROLS,
KEY_WIIMOTE_PROFILE + (Integer.valueOf(padId) + 1), profile);
+ NativeLibrary.SaveGameIniFile(gameId);
}
private static String mapSectionNameFromIni(String generalSectionName)