From 41c074efb8f816ee185a80a90fda8f4c70e50efd Mon Sep 17 00:00:00 2001 From: drdev Date: Mon, 14 Apr 2014 21:14:59 +0000 Subject: [PATCH] Add try/catch blocks to all input entry methods in order to minimize impact of unhandled exceptions --- forge-gui-mobile/src/forge/Forge.java | 127 +++++++++++++----- .../src/forge/toolbox/FDialog.java | 3 +- .../src/forge/toolbox/FOptionPane.java | 4 +- 3 files changed, 96 insertions(+), 38 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index ad7bd9bdcec..df478af745d 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -26,6 +26,7 @@ import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FImage; +import forge.error.BugReporter; import forge.model.FModel; import forge.screens.FScreen; import forge.screens.SplashScreen; @@ -209,92 +210,146 @@ public class Forge implements ApplicationListener { @Override public boolean press(float x, float y) { - for (FDisplayObject listener : potentialListeners) { - if (listener.press(listener.screenToLocalX(x), listener.screenToLocalY(y))) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.press(listener.screenToLocalX(x), listener.screenToLocalY(y))) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean release(float x, float y) { - for (FDisplayObject listener : potentialListeners) { - if (listener.release(listener.screenToLocalX(x), listener.screenToLocalY(y))) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.release(listener.screenToLocalX(x), listener.screenToLocalY(y))) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean longPress(float x, float y) { - for (FDisplayObject listener : potentialListeners) { - if (listener.longPress(listener.screenToLocalX(x), listener.screenToLocalY(y))) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.longPress(listener.screenToLocalX(x), listener.screenToLocalY(y))) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean tap(float x, float y, int count) { - for (FDisplayObject listener : potentialListeners) { - if (listener.tap(listener.screenToLocalX(x), listener.screenToLocalY(y), count)) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.tap(listener.screenToLocalX(x), listener.screenToLocalY(y), count)) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean fling(float velocityX, float velocityY) { - for (FDisplayObject listener : potentialListeners) { - if (listener.fling(velocityX, velocityY)) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.fling(velocityX, velocityY)) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean pan(float x, float y, float deltaX, float deltaY) { - for (FDisplayObject listener : potentialListeners) { - if (listener.pan(listener.screenToLocalX(x), listener.screenToLocalY(y), deltaX, deltaY)) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.pan(listener.screenToLocalX(x), listener.screenToLocalY(y), deltaX, deltaY)) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean panStop(float x, float y) { - for (FDisplayObject listener : potentialListeners) { - if (listener.panStop(listener.screenToLocalX(x), listener.screenToLocalY(y))) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.panStop(listener.screenToLocalX(x), listener.screenToLocalY(y))) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean zoom(float initialDistance, float distance) { - for (FDisplayObject listener : potentialListeners) { - if (listener.zoom(initialDistance, distance)) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.zoom(initialDistance, distance)) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } @Override public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { - for (FDisplayObject listener : potentialListeners) { - if (listener.pinch(initialPointer1, initialPointer2, pointer1, pointer2)) { - return true; + try { + for (FDisplayObject listener : potentialListeners) { + if (listener.pinch(initialPointer1, initialPointer2, pointer1, pointer2)) { + return true; + } } + return false; + } + catch (Exception ex) { + BugReporter.reportException(ex); + return true; } - return false; } } diff --git a/forge-gui-mobile/src/forge/toolbox/FDialog.java b/forge-gui-mobile/src/forge/toolbox/FDialog.java index 486433e0b4b..568f18b3fbc 100644 --- a/forge-gui-mobile/src/forge/toolbox/FDialog.java +++ b/forge-gui-mobile/src/forge/toolbox/FDialog.java @@ -27,7 +27,8 @@ public abstract class FDialog extends FOverlay { protected final void doLayout(float width, float height) { width -= 2 * INSET_X; - float contentHeight = layoutAndGetHeight(width, height - TITLE_HEIGHT); + //ensure no more than half the screen is covered by dialog so it can be moved to see anything + float contentHeight = layoutAndGetHeight(width, height / 2 - TITLE_HEIGHT); totalHeight = contentHeight + TITLE_HEIGHT; float y = (height - totalHeight) / 2; diff --git a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java index 8aa3dafc946..61232987e5d 100644 --- a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java +++ b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java @@ -152,7 +152,9 @@ public class FOptionPane extends FDialog { @Override public void handleEvent(FEvent e) { hide(); - callback.run(option); + if (callback != null) { + callback.run(option); + } } })); }