Merge pull request #12856 from LillyJadeKatrin/retroachievements-pause-v2

Handle Pausing in AchievementManager
This commit is contained in:
Admiral H. Curtiss
2024-07-04 22:53:04 +02:00
committed by GitHub
8 changed files with 147 additions and 6 deletions

View File

@ -6,6 +6,7 @@ import android.app.Application;
import android.content.Context;
import android.hardware.usb.UsbManager;
import org.dolphinemu.dolphinemu.utils.ActivityTracker;
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
import org.dolphinemu.dolphinemu.utils.Java_GCAdapter;
import org.dolphinemu.dolphinemu.utils.Java_WiimoteAdapter;
@ -20,6 +21,7 @@ public class DolphinApplication extends Application
{
super.onCreate();
application = this;
registerActivityLifecycleCallbacks(new ActivityTracker());
VolleyUtil.init(getApplicationContext());
System.loadLibrary("main");

View File

@ -0,0 +1,41 @@
package org.dolphinemu.dolphinemu.utils
import android.app.Activity
import android.app.Application.ActivityLifecycleCallbacks
import android.os.Bundle
class ActivityTracker : ActivityLifecycleCallbacks {
val resumedActivities = HashSet<Activity>()
var backgroundExecutionAllowed = false
override fun onActivityCreated(activity: Activity, bundle: Bundle?) {}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {
resumedActivities.add(activity)
if (!backgroundExecutionAllowed && !resumedActivities.isEmpty()) {
backgroundExecutionAllowed = true
setBackgroundExecutionAllowedNative(true)
}
}
override fun onActivityPaused(activity: Activity) {
resumedActivities.remove(activity)
if (backgroundExecutionAllowed && resumedActivities.isEmpty()) {
backgroundExecutionAllowed = false
setBackgroundExecutionAllowedNative(false)
}
}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
companion object {
@JvmStatic
external fun setBackgroundExecutionAllowedNative(allowed: Boolean)
}
}

View File

@ -0,0 +1,21 @@
// Copyright 2024 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <jni.h>
#include "Common/Logging/Log.h"
#include "Core/AchievementManager.h"
extern "C" {
JNIEXPORT void JNICALL
Java_org_dolphinemu_dolphinemu_utils_ActivityTracker_setBackgroundExecutionAllowedNative(
JNIEnv*, jclass, jboolean allowed)
{
// This is called with allowed == false when the app goes into the background.
// We use this to stop continuously running background threads so we don't waste battery.
INFO_LOG_FMT(CORE, "SetBackgroundExecutionAllowed {}", allowed);
AchievementManager::GetInstance().SetBackgroundExecutionAllowed(allowed);
}
}

View File

@ -1,4 +1,5 @@
add_library(main SHARED
ActivityTracker.cpp
Cheats/ARCheat.cpp
Cheats/Cheats.h
Cheats/GeckoCheat.cpp
@ -11,6 +12,7 @@ add_library(main SHARED
GameList/GameFile.cpp
GameList/GameFile.h
GameList/GameFileCache.cpp
GpuDriver.cpp
Host.cpp
Host.h
InfinityConfig.cpp
@ -32,7 +34,6 @@ add_library(main SHARED
RiivolutionPatches.cpp
SkylanderConfig.cpp
WiiUtils.cpp
GpuDriver.cpp
)
target_link_libraries(main