From 3c7b8efb723a98b33d33b5885e82b7806492c941 Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 14 Apr 2014 19:53:48 +0000 Subject: [PATCH] Fix dev menu options to run in game thread so they don't cause crash --- .../forge/screens/match/views/VDevMenu.java | 78 ++++++++++++++++--- 1 file changed, 67 insertions(+), 11 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java b/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java index 6fdc2404dd5..fdbba127986 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VDevMenu.java @@ -11,6 +11,7 @@ import forge.screens.match.FControl; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.util.GuiDisplayUtil; +import forge.util.ThreadUtil; public class VDevMenu extends FDropDownMenu { @Override @@ -18,37 +19,67 @@ public class VDevMenu extends FDropDownMenu { addItem(new FMenuItem("Generate Mana", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeGenerateMana(); + ThreadUtil.invokeInGameThread(new Runnable() { //must invoke all these in game thread since they may require synchronous user input + @Override + public void run() { + GuiDisplayUtil.devModeGenerateMana(); + } + }); } })); addItem(new FMenuItem("Tutor for Card", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeTutor(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeTutor(); + } + }); } })); addItem(new FMenuItem("Add card to hand", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeCardToHand(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeCardToHand(); + } + }); } })); addItem(new FMenuItem("Add card to play", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeCardToBattlefield(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeCardToBattlefield(); + } + }); } })); addItem(new FMenuItem("Set Player Life", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeSetLife(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeSetLife(); + } + }); } })); addItem(new FMenuItem("Setup Game State", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devSetupGameState(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devSetupGameState(); + } + }); } })); @@ -72,31 +103,56 @@ public class VDevMenu extends FDropDownMenu { addItem(new FMenuItem("Add Counter to Permanent", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeAddCounter(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeAddCounter(); + } + }); } })); addItem(new FMenuItem("Tap Permanent", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeTapPerm(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeTapPerm(); + } + }); } })); addItem(new FMenuItem("Untap Permanent", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeUntapPerm(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeUntapPerm(); + } + }); } })); addItem(new FMenuItem("Rigged planar roll", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModeRiggedPlanarRoll(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModeRiggedPlanarRoll(); + } + }); } })); addItem(new FMenuItem("Planeswalk to", new FEventHandler() { @Override public void handleEvent(FEvent e) { - GuiDisplayUtil.devModePlaneswalkTo(); + ThreadUtil.invokeInGameThread(new Runnable() { + @Override + public void run() { + GuiDisplayUtil.devModePlaneswalkTo(); + } + }); } })); }