diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java index dd2c4e8407..fa347e0f25 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -511,59 +511,54 @@ public final class NativeLibrary Log.error("[NativeLibrary] Alert: " + text); final EmulationActivity emulationActivity = sEmulationActivity.get(); boolean result = false; - if (isWarning && emulationActivity != null && emulationActivity.isIgnoringWarnings()) + + // We can't use AlertMessages unless we have a non-null activity reference + // and are allowed to block. As a fallback, we can use toasts. + if (emulationActivity == null || nonBlocking) { - return true; + new Handler(Looper.getMainLooper()).post( + () -> Toast.makeText(DolphinApplication.getAppContext(), text, Toast.LENGTH_LONG) + .show()); } else { - // We can't use AlertMessages unless we have a non-null activity reference - // and are allowed to block. As a fallback, we can use toasts. - if (emulationActivity == null || nonBlocking) + sIsShowingAlertMessage = true; + + emulationActivity.runOnUiThread(() -> { - new Handler(Looper.getMainLooper()).post( - () -> Toast.makeText(DolphinApplication.getAppContext(), text, Toast.LENGTH_LONG) - .show()); + FragmentManager fragmentManager = emulationActivity.getSupportFragmentManager(); + if (fragmentManager.isStateSaved()) + { + // The activity is being destroyed, so we can't use it to display an AlertMessage. + // Fall back to a toast. + Toast.makeText(emulationActivity, text, Toast.LENGTH_LONG).show(); + NotifyAlertMessageLock(); + } + else + { + AlertMessage.newInstance(caption, text, yesNo, isWarning) + .show(fragmentManager, "AlertMessage"); + } + }); + + // Wait for the lock to notify that it is complete. + synchronized (sAlertMessageLock) + { + try + { + sAlertMessageLock.wait(); + } + catch (Exception ignored) + { + } } - else + + if (yesNo) { - sIsShowingAlertMessage = true; - - emulationActivity.runOnUiThread(() -> - { - FragmentManager fragmentManager = emulationActivity.getSupportFragmentManager(); - if (fragmentManager.isStateSaved()) - { - // The activity is being destroyed, so we can't use it to display an AlertMessage. - // Fall back to a toast. - Toast.makeText(emulationActivity, text, Toast.LENGTH_LONG).show(); - NotifyAlertMessageLock(); - } - else - { - AlertMessage.newInstance(caption, text, yesNo, isWarning) - .show(fragmentManager, "AlertMessage"); - } - }); - - // Wait for the lock to notify that it is complete. - synchronized (sAlertMessageLock) - { - try - { - sAlertMessageLock.wait(); - } - catch (Exception ignored) - { - } - } - - if (yesNo) - { - result = AlertMessage.getAlertResult(); - } + result = AlertMessage.getAlertResult(); } } + sIsShowingAlertMessage = false; return result; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java index 969d1ca3f1..9106d8d81c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java @@ -88,14 +88,12 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP private String[] mPaths; private boolean mRiivolution; private boolean mLaunchSystemMenu; - private boolean mIgnoreWarnings; private static boolean sUserPausedEmulation; private boolean mMenuToastShown; public static final String EXTRA_SELECTED_GAMES = "SelectedGames"; public static final String EXTRA_RIIVOLUTION = "Riivolution"; public static final String EXTRA_SYSTEM_MENU = "SystemMenu"; - public static final String EXTRA_IGNORE_WARNINGS = "IgnoreWarnings"; public static final String EXTRA_USER_PAUSED_EMULATION = "sUserPausedEmulation"; public static final String EXTRA_MENU_TOAST_SHOWN = "MenuToastShown"; @@ -316,7 +314,6 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP mPaths = gameToEmulate.getStringArrayExtra(EXTRA_SELECTED_GAMES); mRiivolution = gameToEmulate.getBooleanExtra(EXTRA_RIIVOLUTION, false); mLaunchSystemMenu = gameToEmulate.getBooleanExtra(EXTRA_SYSTEM_MENU, false); - mIgnoreWarnings = gameToEmulate.getBooleanExtra(EXTRA_IGNORE_WARNINGS, false); sUserPausedEmulation = gameToEmulate.getBooleanExtra(EXTRA_USER_PAUSED_EMULATION, false); mMenuToastShown = false; activityRecreated = false; @@ -366,7 +363,6 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP mEmulationFragment.saveTemporaryState(); } outState.putStringArray(EXTRA_SELECTED_GAMES, mPaths); - outState.putBoolean(EXTRA_IGNORE_WARNINGS, mIgnoreWarnings); outState.putBoolean(EXTRA_USER_PAUSED_EMULATION, sUserPausedEmulation); outState.putBoolean(EXTRA_MENU_TOAST_SHOWN, mMenuToastShown); super.onSaveInstanceState(outState); @@ -375,7 +371,6 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP protected void restoreState(Bundle savedInstanceState) { mPaths = savedInstanceState.getStringArray(EXTRA_SELECTED_GAMES); - mIgnoreWarnings = savedInstanceState.getBoolean(EXTRA_IGNORE_WARNINGS); sUserPausedEmulation = savedInstanceState.getBoolean(EXTRA_USER_PAUSED_EMULATION); mMenuToastShown = savedInstanceState.getBoolean(EXTRA_MENU_TOAST_SHOWN); } @@ -754,16 +749,6 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP } } - public boolean isIgnoringWarnings() - { - return mIgnoreWarnings; - } - - public void setIgnoreWarnings(boolean value) - { - mIgnoreWarnings = value; - } - public static boolean getHasUserPausedEmulation() { return sUserPausedEmulation; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.java index 69cf5ef280..aef3016134 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.java @@ -13,6 +13,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; +import org.dolphinemu.dolphinemu.features.settings.model.NativeConfig; public final class AlertMessage extends DialogFragment { @@ -82,7 +84,7 @@ public final class AlertMessage extends DialogFragment { builder.setNeutralButton(R.string.ignore_warning_alert_messages, (dialog, which) -> { - emulationActivity.setIgnoreWarnings(true); + BooleanSetting.MAIN_USE_PANIC_HANDLERS.setBoolean(NativeConfig.LAYER_CURRENT, false); dialog.dismiss(); NativeLibrary.NotifyAlertMessageLock(); }); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java index 0c02f1b9a0..2a82bdd5b4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java @@ -329,6 +329,18 @@ public enum BooleanSetting implements AbstractBooleanSetting } } + public void setBoolean(int layerType, boolean newValue) + { + if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) + { + NativeConfig.setBoolean(layerType, mFile, mSection, mKey, newValue); + } + else + { + throw new UnsupportedOperationException("The old config system doesn't support layers"); + } + } + public boolean getBooleanGlobal() { return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java index 21ad4b661f..07646a2eb8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java @@ -8,6 +8,7 @@ public class NativeConfig public static final int LAYER_BASE = 1; public static final int LAYER_LOCAL_GAME = 2; public static final int LAYER_ACTIVE = 3; + public static final int LAYER_CURRENT = 4; public static native boolean isSettingSaveable(String file, String section, String key); diff --git a/Source/Android/jni/Config/NativeConfig.cpp b/Source/Android/jni/Config/NativeConfig.cpp index 4ec0d0bd86..f707e91f5b 100644 --- a/Source/Android/jni/Config/NativeConfig.cpp +++ b/Source/Android/jni/Config/NativeConfig.cpp @@ -16,6 +16,7 @@ constexpr jint LAYER_BASE_OR_CURRENT = 0; constexpr jint LAYER_BASE = 1; constexpr jint LAYER_LOCAL_GAME = 2; constexpr jint LAYER_ACTIVE = 3; +constexpr jint LAYER_CURRENT = 4; static Config::Location GetLocation(JNIEnv* env, jstring file, jstring section, jstring key) { @@ -76,6 +77,10 @@ static std::shared_ptr GetLayer(jint layer, const Config::Locatio layer_type = Config::GetActiveLayerForConfig(location); break; + case LAYER_CURRENT: + layer_type = Config::LayerType::CurrentRun; + break; + default: ASSERT(false); return nullptr; diff --git a/Source/Core/Common/Config/Config.h b/Source/Core/Common/Config/Config.h index d956a203aa..b448f234f9 100644 --- a/Source/Core/Common/Config/Config.h +++ b/Source/Core/Common/Config/Config.h @@ -120,6 +120,13 @@ void SetBaseOrCurrent(const Info& info, const std::common_type_t& value) Set(LayerType::CurrentRun, info, value); } +template +void DeleteKey(LayerType layer, const Info& info) +{ + if (GetLayer(layer)->DeleteKey(info.GetLocation())) + OnConfigChanged(); +} + // Used to defer OnConfigChanged until after the completion of many config changes. class ConfigChangeCallbackGuard { diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp index bd17fe5890..06a29081f6 100644 --- a/Source/Core/DolphinQt/Main.cpp +++ b/Source/Core/DolphinQt/Main.cpp @@ -92,7 +92,7 @@ static bool QtMsgAlertHandler(const char* caption, const char* text, bool yes_no if (button == QMessageBox::Ignore) { - Common::SetEnableAlert(false); + Config::SetCurrent(Config::MAIN_USE_PANIC_HANDLERS, false); return true; } diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp index 790e19f8d3..e1737f79d3 100644 --- a/Source/Core/DolphinQt/MenuBar.cpp +++ b/Source/Core/DolphinQt/MenuBar.cpp @@ -548,8 +548,7 @@ void MenuBar::AddOptionsMenu() m_reset_ignore_panic_handler = options_menu->addAction(tr("Reset Ignore Panic Handler")); connect(m_reset_ignore_panic_handler, &QAction::triggered, this, []() { - if (Config::Get(Config::MAIN_USE_PANIC_HANDLERS)) - Common::SetEnableAlert(true); + Config::DeleteKey(Config::LayerType::CurrentRun, Config::MAIN_USE_PANIC_HANDLERS); }); m_change_font = options_menu->addAction(tr("&Font..."), this, &MenuBar::ChangeDebugFont);