mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-11-25 02:44:14 +00:00
Merge pull request #14077 from Simonx22/android-alert-message-kotlin
Android: Convert AlertMessage dialog to Kotlin
This commit is contained in:
commit
5ee1ae43bb
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user