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.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.FImage; import forge.assets.FImage;
import forge.error.BugReporter;
import forge.model.FModel; import forge.model.FModel;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.SplashScreen; import forge.screens.SplashScreen;
@@ -209,92 +210,146 @@ public class Forge implements ApplicationListener {
@Override @Override
public boolean press(float x, float y) { public boolean press(float x, float y) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.press(listener.screenToLocalX(x), listener.screenToLocalY(y))) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.press(listener.screenToLocalX(x), listener.screenToLocalY(y))) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean release(float x, float y) { public boolean release(float x, float y) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.release(listener.screenToLocalX(x), listener.screenToLocalY(y))) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.release(listener.screenToLocalX(x), listener.screenToLocalY(y))) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean longPress(float x, float y) { public boolean longPress(float x, float y) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.longPress(listener.screenToLocalX(x), listener.screenToLocalY(y))) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.longPress(listener.screenToLocalX(x), listener.screenToLocalY(y))) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean tap(float x, float y, int count) { public boolean tap(float x, float y, int count) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.tap(listener.screenToLocalX(x), listener.screenToLocalY(y), count)) { for (FDisplayObject listener : potentialListeners) {
return true; 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 @Override
public boolean fling(float velocityX, float velocityY) { public boolean fling(float velocityX, float velocityY) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.fling(velocityX, velocityY)) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.fling(velocityX, velocityY)) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean pan(float x, float y, float deltaX, float deltaY) { public boolean pan(float x, float y, float deltaX, float deltaY) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.pan(listener.screenToLocalX(x), listener.screenToLocalY(y), deltaX, deltaY)) { for (FDisplayObject listener : potentialListeners) {
return true; 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 @Override
public boolean panStop(float x, float y) { public boolean panStop(float x, float y) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.panStop(listener.screenToLocalX(x), listener.screenToLocalY(y))) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.panStop(listener.screenToLocalX(x), listener.screenToLocalY(y))) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean zoom(float initialDistance, float distance) { public boolean zoom(float initialDistance, float distance) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.zoom(initialDistance, distance)) { for (FDisplayObject listener : potentialListeners) {
return true; if (listener.zoom(initialDistance, distance)) {
return true;
}
} }
return false;
}
catch (Exception ex) {
BugReporter.reportException(ex);
return true;
} }
return false;
} }
@Override @Override
public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) { public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) {
for (FDisplayObject listener : potentialListeners) { try {
if (listener.pinch(initialPointer1, initialPointer2, pointer1, pointer2)) { for (FDisplayObject listener : potentialListeners) {
return true; 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) { protected final void doLayout(float width, float height) {
width -= 2 * INSET_X; 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; totalHeight = contentHeight + TITLE_HEIGHT;
float y = (height - totalHeight) / 2; float y = (height - totalHeight) / 2;

View File

@@ -152,7 +152,9 @@ public class FOptionPane extends FDialog {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
hide(); hide();
callback.run(option); if (callback != null) {
callback.run(option);
}
} }
})); }));
} }