diff options
| author | zackhow <zackhow@gmail.com> | 2018-09-24 21:07:56 -0400 |
|---|---|---|
| committer | zackhow <zackhow@gmail.com> | 2018-10-28 20:22:06 -0400 |
| commit | 405b37deaa4b59659906d709dbe7a220cc875b74 (patch) | |
| tree | e9d956ddd1cc3d91c511f344bf81570fc16d6908 /Source/Android/app/src/main/java | |
| parent | 5d93a10c60f25acd4f9045234156fd68720b1a87 (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')
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) |
