summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
author34will <wgilmour@hotmail.co.uk>2018-01-07 22:30:28 +0000
committer34will <wgilmour@hotmail.co.uk>2018-01-10 13:41:57 +0000
commit10ea9e5f5b4da1b0ff0c9615ee3772125c0348cd (patch)
tree66dd1b7dcc18bab7886b9cb856dec92db8c2548f /Source/Android/app/src/main/java
parentdc08b73db19b8d59ec9ba373a4fb8d7d8639c9e3 (diff)
Added an actual implementation for yes/no dialogs on Android using Object.wait and Object.notify.
Modified NativeLibrary to display alerts in AlertDialogs rather than Toast notifications, and allow yes/no options. Modified MainAndroid to use the new displayAlertMsg, and to return its output.
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java78
1 files changed, 73 insertions, 5 deletions
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 e82de7fa01..d7e0e50f00 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
@@ -6,6 +6,11 @@
package org.dolphinemu.dolphinemu;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
import android.view.Surface;
import android.widget.Toast;
@@ -401,18 +406,81 @@ public final class NativeLibrary
CacheClassesAndMethods();
}
- public static void displayAlertMsg(final String alert)
+ private static boolean alertResult = false;
+ public static boolean displayAlertMsg(final String caption, final String text, final boolean yesNo)
{
- Log.error("[NativeLibrary] Alert: " + alert);
+ Log.error("[NativeLibrary] Alert: " + text);
final EmulationActivity emulationActivity = sEmulationActivity.get();
- if (emulationActivity != null)
+ boolean result = false;
+ if (emulationActivity == null)
{
- emulationActivity.runOnUiThread(() -> Toast.makeText(emulationActivity, "Panic Alert: " + alert, Toast.LENGTH_LONG).show());
+ Log.warning("[NativeLibrary] EmulationActivity is null, can't do panic alert.");
}
else
{
- Log.warning("[NativeLibrary] EmulationActivity is null, can't do panic toast.");
+ // Create object used for waiting.
+ final Object lock = new Object();
+ AlertDialog.Builder builder = new AlertDialog.Builder(emulationActivity)
+ .setTitle(caption)
+ .setMessage(text);
+
+ // If not yes/no dialog just have one button that dismisses modal,
+ // otherwise have a yes and no button that sets alertResult accordingly.
+ if (!yesNo)
+ {
+ builder
+ .setCancelable(false)
+ .setPositiveButton("OK", (dialog, whichButton) ->
+ {
+ dialog.dismiss();
+ synchronized (lock)
+ {
+ lock.notify();
+ }
+ });
+ }
+ else
+ {
+ alertResult = false;
+
+ builder
+ .setPositiveButton("Yes", (dialog, whichButton) ->
+ {
+ alertResult = true;
+ dialog.dismiss();
+ synchronized (lock)
+ {
+ lock.notify();
+ }
+ })
+ .setNegativeButton("No", (dialog, whichButton) ->
+ {
+ alertResult = false;
+ dialog.dismiss();
+ synchronized (lock)
+ {
+ lock.notify();
+ }
+ });
+ }
+
+ // Show the AlertDialog on the main thread.
+ emulationActivity.runOnUiThread(() -> builder.show());
+
+ // Wait for the lock to notify that it is complete.
+ synchronized (lock)
+ {
+ try
+ {
+ lock.wait();
+ }
+ catch (Exception e) { }
+ }
+
+ if (yesNo)
+ result = alertResult;
}
+ return result;
}
public static void setEmulationActivity(EmulationActivity emulationActivity)