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.
This commit is contained in:
JosJuice 2023-03-15 22:12:23 +01:00
parent d80f9d53fc
commit 3e7a16f225
2 changed files with 22 additions and 9 deletions

View File

@ -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) {

View File

@ -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();
}
}));
}
}