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 69b9a945954..eca80d530c8 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 @@ -497,7 +497,7 @@ public final class NativeLibrary } else { - AlertMessage.newInstance(caption, text, yesNo, isWarning) + AlertMessage.Companion.newInstance(caption, text, yesNo, isWarning) .show(fragmentManager, "AlertMessage"); } }); @@ -513,7 +513,7 @@ public final class NativeLibrary if (yesNo) { - result = AlertMessage.getAlertResult(); + result = AlertMessage.Companion.getAlertResult(); } } 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 deleted file mode 100644 index aef30161342..00000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.java +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later - -package org.dolphinemu.dolphinemu.dialogs; - -import android.app.Dialog; -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; - -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 -{ - private static boolean sAlertResult = false; - private static final String ARG_TITLE = "title"; - private static final String ARG_MESSAGE = "message"; - private static final String ARG_YES_NO = "yesNo"; - private static final String ARG_IS_WARNING = "isWarning"; - - public static AlertMessage newInstance(String title, String message, boolean yesNo, - boolean isWarning) - { - AlertMessage fragment = new AlertMessage(); - - Bundle args = new Bundle(); - args.putString(ARG_TITLE, title); - args.putString(ARG_MESSAGE, message); - args.putBoolean(ARG_YES_NO, yesNo); - args.putBoolean(ARG_IS_WARNING, isWarning); - fragment.setArguments(args); - - return fragment; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) - { - final EmulationActivity emulationActivity = NativeLibrary.getEmulationActivity(); - String title = requireArguments().getString(ARG_TITLE); - String message = requireArguments().getString(ARG_MESSAGE); - boolean yesNo = requireArguments().getBoolean(ARG_YES_NO); - boolean isWarning = requireArguments().getBoolean(ARG_IS_WARNING); - setCancelable(false); - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(emulationActivity) - .setTitle(title) - .setMessage(message); - - // If not yes/no dialog just have one button that dismisses modal, - // otherwise have a yes and no button that sets sAlertResult accordingly. - if (!yesNo) - { - builder.setPositiveButton(android.R.string.ok, (dialog, which) -> - { - dialog.dismiss(); - NativeLibrary.NotifyAlertMessageLock(); - }); - } - else - { - builder.setPositiveButton(android.R.string.yes, (dialog, which) -> - { - sAlertResult = true; - dialog.dismiss(); - NativeLibrary.NotifyAlertMessageLock(); - }) - .setNegativeButton(android.R.string.no, (dialog, which) -> - { - sAlertResult = false; - dialog.dismiss(); - NativeLibrary.NotifyAlertMessageLock(); - }); - } - - if (isWarning) - { - builder.setNeutralButton(R.string.ignore_warning_alert_messages, (dialog, which) -> - { - BooleanSetting.MAIN_USE_PANIC_HANDLERS.setBoolean(NativeConfig.LAYER_CURRENT, false); - dialog.dismiss(); - NativeLibrary.NotifyAlertMessageLock(); - }); - } - - return builder.create(); - } - - public static boolean getAlertResult() - { - return sAlertResult; - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.kt new file mode 100644 index 00000000000..3c87b324f63 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/AlertMessage.kt @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.dialogs + +import android.app.Dialog +import android.content.DialogInterface +import android.os.Bundle +import androidx.fragment.app.DialogFragment +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 + +class AlertMessage : DialogFragment() { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val emulationActivity: EmulationActivity = NativeLibrary.getEmulationActivity() + val args = requireArguments() + val title = args.getString(ARG_TITLE).orEmpty() + val message = args.getString(ARG_MESSAGE).orEmpty() + val yesNo = args.getBoolean(ARG_YES_NO) + val isWarning = args.getBoolean(ARG_IS_WARNING) + isCancelable = false + + return MaterialAlertDialogBuilder(emulationActivity).setTitle(title).setMessage(message) + .apply { configureButtons(yesNo, isWarning) }.create() + } + + private fun MaterialAlertDialogBuilder.configureButtons(yesNo: Boolean, isWarning: Boolean) { + if (yesNo) { + setPositiveButton(android.R.string.yes) { dialog, _ -> + dialog.releaseLock(result = true) + } + setNegativeButton(android.R.string.no) { dialog, _ -> + dialog.releaseLock(result = false) + } + } else { + setPositiveButton(android.R.string.ok) { dialog, _ -> + dialog.releaseLock() + } + } + + if (isWarning) { + setNeutralButton(R.string.ignore_warning_alert_messages) { dialog, _ -> + BooleanSetting.MAIN_USE_PANIC_HANDLERS.setBoolean( + NativeConfig.LAYER_CURRENT, false + ) + dialog.releaseLock() + } + } + } + + private fun DialogInterface.releaseLock(result: Boolean? = null) { + result?.let { alertResult = it } + dismiss() + NativeLibrary.NotifyAlertMessageLock() + } + + companion object { + private var alertResult = false + private const val ARG_TITLE = "title" + private const val ARG_MESSAGE = "message" + private const val ARG_YES_NO = "yesNo" + private const val ARG_IS_WARNING = "isWarning" + + fun newInstance( + title: String, message: String, yesNo: Boolean, isWarning: Boolean + ): AlertMessage { + return AlertMessage().apply { + arguments = Bundle().apply { + putString(ARG_TITLE, title) + putString(ARG_MESSAGE, message) + putBoolean(ARG_YES_NO, yesNo) + putBoolean(ARG_IS_WARNING, isWarning) + } + } + } + + fun getAlertResult(): Boolean = alertResult + } +}