Merge pull request #14077 from Simonx22/android-alert-message-kotlin

Android: Convert AlertMessage dialog to Kotlin
This commit is contained in:
OatmealDome 2025-11-08 14:03:19 -05:00 committed by GitHub
commit 5ee1ae43bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 84 additions and 102 deletions

View File

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

View File

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

View File

@ -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
}
}