From f02c21a51f0e0ce3d85f9d778c591a3c557061b3 Mon Sep 17 00:00:00 2001 From: "kim..ng" Date: Fri, 17 Jun 2011 09:56:55 +0000 Subject: [PATCH] Android: fixed crash in harness if inputManager is not initialized yet git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7647 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../android/com/jme3/app/AndroidHarness.java | 20 +++++++----------- .../com/jme3/system/android/OGLESContext.java | 21 ++++++++++++++++--- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/engine/src/android/com/jme3/app/AndroidHarness.java b/engine/src/android/com/jme3/app/AndroidHarness.java index 44b9b0588..1e59f1a27 100644 --- a/engine/src/android/com/jme3/app/AndroidHarness.java +++ b/engine/src/android/com/jme3/app/AndroidHarness.java @@ -11,7 +11,6 @@ import android.view.Window; import android.view.WindowManager; import com.jme3.app.Application; -import com.jme3.app.android.AndroidApplication; import com.jme3.input.TouchInput; import com.jme3.input.android.AndroidInput; import com.jme3.input.controls.TouchListener; @@ -37,8 +36,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt protected String appClass = "jme3test.android.Test"; protected Application app = null; - protected boolean debug = false; - + protected boolean debug = false; final private String ESCAPE_EVENT = "TouchEscape"; @Override @@ -54,16 +52,14 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt AppSettings settings = new AppSettings(true); AndroidInput input = new AndroidInput(this); - - - + // Create application instance try{ @SuppressWarnings("unchecked") Class clazz = (Class) Class.forName(appClass); app = clazz.newInstance(); }catch (Exception ex){ - ex.printStackTrace(); + handleError("Class " + appClass + " init failed", ex); } app.setSettings(settings); @@ -77,10 +73,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt { view = ctx.createView(input); } - setContentView(view); - - app.inputManager.addMapping(ESCAPE_EVENT, new TouchTrigger(TouchInput.KEYCODE_BACK)); - app.inputManager.addListener(this, new String[]{ESCAPE_EVENT}); + setContentView(view); } @@ -125,7 +118,10 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt logger.info("onDestroy"); } - + public Application getJmeApplication() + { + return app; + } /** * Called when an error has occured. This is typically * invoked when an uncought exception is thrown in the render thread. diff --git a/engine/src/android/com/jme3/system/android/OGLESContext.java b/engine/src/android/com/jme3/system/android/OGLESContext.java index a762a90c0..9be645001 100644 --- a/engine/src/android/com/jme3/system/android/OGLESContext.java +++ b/engine/src/android/com/jme3/system/android/OGLESContext.java @@ -39,11 +39,13 @@ import android.opengl.GLSurfaceView; import android.view.SurfaceHolder; import com.jme3.app.AndroidHarness; +import com.jme3.app.Application; import com.jme3.input.JoyInput; import com.jme3.input.KeyInput; import com.jme3.input.MouseInput; import com.jme3.input.TouchInput; import com.jme3.input.android.AndroidInput; +import com.jme3.input.controls.TouchTrigger; import com.jme3.input.dummy.DummyKeyInput; import com.jme3.input.dummy.DummyMouseInput; import com.jme3.renderer.android.OGLESShaderRenderer; @@ -95,6 +97,8 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer */ protected int clientOpenGLESVersion = 1; + final private String ESCAPE_EVENT = "TouchEscape"; + public OGLESContext() { } @Override @@ -352,10 +356,21 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer renderer.setVerboseLogging(false); renderer.initialize(); - listener.initialize(); - created.set(true); + listener.initialize(); + + // Setup exit hook + if (ctx instanceof AndroidHarness) + { + Application app = ((AndroidHarness)ctx).getJmeApplication(); + if (app.getInputManager() != null) + { + app.getInputManager().addMapping(ESCAPE_EVENT, new TouchTrigger(TouchInput.KEYCODE_BACK)); + app.getInputManager().addListener((AndroidHarness)ctx, new String[]{ESCAPE_EVENT}); + } + } - needClose.set(false); + created.set(true); + needClose.set(false); } /**