|
@@ -15,11 +15,14 @@ import android.widget.ImageView;
|
|
|
import android.widget.TextView;
|
|
|
import com.jme3.audio.AudioRenderer;
|
|
|
import com.jme3.audio.android.AndroidAudioRenderer;
|
|
|
+import com.jme3.input.TouchInput;
|
|
|
import com.jme3.input.android.AndroidInput;
|
|
|
import com.jme3.input.controls.TouchListener;
|
|
|
+import com.jme3.input.controls.TouchTrigger;
|
|
|
import com.jme3.input.event.TouchEvent;
|
|
|
import com.jme3.system.AppSettings;
|
|
|
import com.jme3.system.JmeSystem;
|
|
|
+import com.jme3.system.SystemListener;
|
|
|
import com.jme3.system.android.AndroidConfigChooser.ConfigType;
|
|
|
import com.jme3.system.android.JmeAndroidSystem;
|
|
|
import com.jme3.system.android.OGLESContext;
|
|
@@ -37,7 +40,7 @@ import java.util.logging.Logger;
|
|
|
* @author Kirill
|
|
|
* @author larynx
|
|
|
*/
|
|
|
-public class AndroidHarness extends Activity implements TouchListener, DialogInterface.OnClickListener {
|
|
|
+public class AndroidHarness extends Activity implements TouchListener, DialogInterface.OnClickListener, SystemListener {
|
|
|
|
|
|
protected final static Logger logger = Logger.getLogger(AndroidHarness.class.getName());
|
|
|
/**
|
|
@@ -73,6 +76,10 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
* if true finish this activity when the jme app is stopped
|
|
|
*/
|
|
|
protected boolean finishOnAppStop = true;
|
|
|
+ /**
|
|
|
+ * set to false if you don't want the harness to handle the exit hook
|
|
|
+ */
|
|
|
+ protected boolean handleExitHook = true;
|
|
|
/**
|
|
|
* Title of the exit dialog, default is "Do you want to exit?"
|
|
|
*/
|
|
@@ -118,6 +125,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
private ImageView splashImageView = null;
|
|
|
private FrameLayout frameLayout = null;
|
|
|
final private String ESCAPE_EVENT = "TouchEscape";
|
|
|
+ private boolean firstDrawFrame = true;
|
|
|
|
|
|
static {
|
|
|
try {
|
|
@@ -190,7 +198,8 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
|
|
|
AppSettings s = ctx.getSettings();
|
|
|
logger.log(Level.INFO, "Settings: Width {0} Height {1}", new Object[]{s.getWidth(), s.getHeight()});
|
|
|
-
|
|
|
+ //setting the Harness as the system listener
|
|
|
+ ctx.setSystemListener(this);
|
|
|
layoutDisplay();
|
|
|
} catch (Exception ex) {
|
|
|
handleError("Class " + appClass + " init failed", ex);
|
|
@@ -244,7 +253,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
//pause the audio
|
|
|
AudioRenderer result = app.getAudioRenderer();
|
|
|
if (result != null) {
|
|
|
- logger.info("pause: " + result.getClass().getSimpleName());
|
|
|
+ logger.log(Level.INFO, "pause: {0}", result.getClass().getSimpleName());
|
|
|
if (result instanceof AndroidAudioRenderer) {
|
|
|
AndroidAudioRenderer renderer = (AndroidAudioRenderer) result;
|
|
|
renderer.pauseAll();
|
|
@@ -321,6 +330,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
if (app != null) {
|
|
|
app.stop(true);
|
|
|
}
|
|
|
+ app = null;
|
|
|
this.finish();
|
|
|
}
|
|
|
}
|
|
@@ -400,9 +410,47 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public boolean isFinishOnAppStop() {
|
|
|
- return finishOnAppStop;
|
|
|
+ public void initialize() {
|
|
|
+ app.initialize();
|
|
|
+ if (handleExitHook) {
|
|
|
+ app.getInputManager().addMapping(ESCAPE_EVENT, new TouchTrigger(TouchInput.KEYCODE_BACK));
|
|
|
+ app.getInputManager().addListener(this, new String[]{ESCAPE_EVENT});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void reshape(int width, int height) {
|
|
|
+ app.reshape(width, height);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void update() {
|
|
|
+ app.update();
|
|
|
+ // call to remove the splash screen, if present.
|
|
|
+ // call after app.update() to make sure no gap between
|
|
|
+ // splash screen going away and app display being shown.
|
|
|
+ if (firstDrawFrame) {
|
|
|
+ removeSplashScreen();
|
|
|
+ firstDrawFrame = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void requestClose(boolean esc) {
|
|
|
+ app.requestClose(esc);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void gainFocus() {
|
|
|
+ app.gainFocus();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void loseFocus() {
|
|
|
+ app.loseFocus();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void destroy() {
|
|
|
+ if (app != null) {
|
|
|
+ app.destroy();
|
|
|
+ }
|
|
|
+ if (finishOnAppStop) {
|
|
|
+ finish();
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|