From 01b44837f4f970246e800d46e57e4382eb17d065 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 15 Jun 2024 18:15:45 +0200 Subject: Android: Track whether app is in foreground --- .../dolphinemu/dolphinemu/DolphinApplication.java | 2 ++ .../dolphinemu/dolphinemu/utils/ActivityTracker.kt | 41 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java index c197c002b0..e0816e408b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java @@ -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"); 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 new file mode 100644 index 0000000000..b3a6a5d91a --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ActivityTracker.kt @@ -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() + 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) + } +} -- cgit v1.2.3