diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt index f4423c6d36..93a81f5f50 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt @@ -49,10 +49,21 @@ class ActivityTracker : ActivityLifecycleCallbacks { override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {} + override fun onActivityPostSaveInstanceState(activity: Activity, bundle: Bundle) { + if (DirectoryInitialization.areDolphinDirectoriesReady() && + !activity.isChangingConfigurations + ) { + flushUnsavedData() + } + } + override fun onActivityDestroyed(activity: Activity) {} companion object { @JvmStatic external fun setBackgroundExecutionAllowedNative(allowed: Boolean) + + @JvmStatic + external fun flushUnsavedData() } } diff --git a/Source/Android/jni/ActivityTracker.cpp b/Source/Android/jni/ActivityTracker.cpp index b871890576..20fc7df79a 100644 --- a/Source/Android/jni/ActivityTracker.cpp +++ b/Source/Android/jni/ActivityTracker.cpp @@ -5,6 +5,8 @@ #include "Common/Logging/Log.h" #include "Core/AchievementManager.h" +#include "UICommon/UICommon.h" +#include "jni/Host.h" extern "C" { @@ -18,4 +20,11 @@ Java_org_dolphinemu_dolphinemu_utils_ActivityTracker_setBackgroundExecutionAllow INFO_LOG_FMT(CORE, "SetBackgroundExecutionAllowed {}", allowed); AchievementManager::GetInstance().SetBackgroundExecutionAllowed(allowed); } + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_utils_ActivityTracker_flushUnsavedData(JNIEnv*, jclass) +{ + HostThreadLock guard; + UICommon::FlushUnsavedData(); +} } diff --git a/Source/Core/UICommon/UICommon.cpp b/Source/Core/UICommon/UICommon.cpp index 309d563864..f0da96f872 100644 --- a/Source/Core/UICommon/UICommon.cpp +++ b/Source/Core/UICommon/UICommon.cpp @@ -158,6 +158,11 @@ void Shutdown() Config::Shutdown(); } +void FlushUnsavedData() +{ + INFO_LOG_FMT(CORE, "Flushing unsaved data..."); +} + void InitControllers(const WindowSystemInfo& wsi) { if (g_controller_interface.IsInit()) diff --git a/Source/Core/UICommon/UICommon.h b/Source/Core/UICommon/UICommon.h index f23a0005c7..e586283816 100644 --- a/Source/Core/UICommon/UICommon.h +++ b/Source/Core/UICommon/UICommon.h @@ -14,6 +14,8 @@ namespace UICommon void Init(); void Shutdown(); +void FlushUnsavedData(); + void InitControllers(const WindowSystemInfo& wsi); void ShutdownControllers();