summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2023-03-15 22:12:23 +0100
committerJosJuice <josjuice@gmail.com>2023-12-07 21:09:17 +0100
commit3e7a16f225df1baf94f643e70e6a7ea91dd7ac7a (patch)
treecb6a59848e5d05dac2c5bc7ff4a5d8fe69da0a92 /Source/Android/app/src/main/java
parentd80f9d53fc70e4d4197bea5bfaf1afd63b7f7879 (diff)
Android: Use config changed callback for tracking recursive scan setting
This way the Settings class doesn't contain a hardcoded reference to a specific setting. And Settings.loadSettings no longer calls getBoolean, which is a step towards fixing the crash when recreating EmulationActivity after process death.
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt9
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java22
2 files changed, 22 insertions, 9 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt
index 27291718dc..c5c1851e5d 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.kt
@@ -8,7 +8,6 @@ import android.widget.Toast
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.features.input.model.MappingCommon
-import org.dolphinemu.dolphinemu.services.GameFileCacheManager
import java.io.Closeable
class Settings : Closeable {
@@ -19,7 +18,6 @@ class Settings : Closeable {
private set
private var settingsLoaded = false
- private var loadedRecursiveIsoPathsValue = false
private val isGameSpecific: Boolean
get() = !TextUtils.isEmpty(gameId)
@@ -41,8 +39,6 @@ class Settings : Closeable {
check(!NativeLibrary.IsRunning()) { "Attempted to load game INI while emulating" }
NativeConfig.loadGameInis(gameId, revision)
}
-
- loadedRecursiveIsoPathsValue = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.boolean
}
fun loadSettings(gameId: String, revision: Int, isWii: Boolean) {
@@ -65,11 +61,6 @@ class Settings : Closeable {
NativeLibrary.ReloadLoggerConfig()
NativeLibrary.UpdateGCAdapterScanThread()
-
- if (loadedRecursiveIsoPathsValue != BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.boolean) {
- // Refresh game library
- GameFileCacheManager.startRescan()
- }
} else {
// custom game settings
if (context != null) {
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java
index a979ee599f..4c77cfdbc2 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheManager.java
@@ -2,9 +2,14 @@
package org.dolphinemu.dolphinemu.services;
+import android.os.Handler;
+import android.os.Looper;
+
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
+import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.ConfigChangedCallback;
import org.dolphinemu.dolphinemu.model.GameFile;
import org.dolphinemu.dolphinemu.model.GameFileCache;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
@@ -26,6 +31,7 @@ public final class GameFileCacheManager
new MutableLiveData<>(new GameFile[]{});
private static boolean sFirstLoadDone = false;
private static boolean sRunRescanAfterLoad = false;
+ private static boolean sRecursiveScanEnabled;
private static final ExecutorService sExecutor = Executors.newFixedThreadPool(1);
private static final MutableLiveData<Boolean> sLoadInProgress = new MutableLiveData<>(false);
@@ -182,6 +188,7 @@ public final class GameFileCacheManager
if (!sFirstLoadDone)
{
sFirstLoadDone = true;
+ setUpAutomaticRescan();
sGameFileCache.load();
if (sGameFileCache.getSize() != 0)
{
@@ -258,4 +265,19 @@ public final class GameFileCacheManager
sGameFileCache = new GameFileCache();
}
}
+
+ private static void setUpAutomaticRescan()
+ {
+ sRecursiveScanEnabled = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean();
+ new ConfigChangedCallback(() ->
+ new Handler(Looper.getMainLooper()).post(() ->
+ {
+ boolean recursiveScanEnabled = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean();
+ if (sRecursiveScanEnabled != recursiveScanEnabled)
+ {
+ sRecursiveScanEnabled = recursiveScanEnabled;
+ startRescan();
+ }
+ }));
+ }
}