Add try/catch blocks to all input entry methods in order to minimize impact of unhandled exceptions

This commit is contained in:
drdev
2014-04-14 21:14:59 +00:00
parent 53828fdcfa
commit 41c074efb8
3 changed files with 96 additions and 38 deletions

View File

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

View File

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

View File

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