|
|
@ -70,7 +70,8 @@ import java.util.logging.Logger; |
|
|
|
* |
|
|
|
* |
|
|
|
* @author iwgeric |
|
|
|
* @author iwgeric |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class AndroidHarnessFragment extends Fragment implements TouchListener, DialogInterface.OnClickListener, SystemListener { |
|
|
|
public class AndroidHarnessFragment extends Fragment implements |
|
|
|
|
|
|
|
TouchListener, DialogInterface.OnClickListener, View.OnLayoutChangeListener, SystemListener { |
|
|
|
private static final Logger logger = Logger.getLogger(AndroidHarnessFragment.class.getName()); |
|
|
|
private static final Logger logger = Logger.getLogger(AndroidHarnessFragment.class.getName()); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
@ -121,6 +122,18 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected int frameRate = -1; |
|
|
|
protected int frameRate = -1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Set the maximum resolution for the surfaceview in either the |
|
|
|
|
|
|
|
* width or height screen direction depending on the screen size. |
|
|
|
|
|
|
|
* If the surfaceview is retangular, the longest side (width or height) |
|
|
|
|
|
|
|
* will have the resolution set to a maximum of maxResolutionDimension. |
|
|
|
|
|
|
|
* The other direction will be set to a value that maintains the aspect |
|
|
|
|
|
|
|
* ratio of the surfaceview. </br> |
|
|
|
|
|
|
|
* Any value < 0 (default = -1) will result in the surfaceview having the |
|
|
|
|
|
|
|
* same resolution as the view layout (ie. no max resolution). |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
protected int maxResolutionDimension = -1; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Sets the type of Audio Renderer to be used. |
|
|
|
* Sets the type of Audio Renderer to be used. |
|
|
|
* <p> |
|
|
|
* <p> |
|
|
@ -208,6 +221,8 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
final private String ESCAPE_EVENT = "TouchEscape"; |
|
|
|
final private String ESCAPE_EVENT = "TouchEscape"; |
|
|
|
private boolean firstDrawFrame = true; |
|
|
|
private boolean firstDrawFrame = true; |
|
|
|
private Application app = null; |
|
|
|
private Application app = null; |
|
|
|
|
|
|
|
private int viewWidth = 0; |
|
|
|
|
|
|
|
private int viewHeight = 0; |
|
|
|
|
|
|
|
|
|
|
|
// Retrieves the jME application object
|
|
|
|
// Retrieves the jME application object
|
|
|
|
public Application getJmeApplication() { |
|
|
|
public Application getJmeApplication() { |
|
|
@ -294,6 +309,7 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
// store the glSurfaceView in JmeAndroidSystem for future use
|
|
|
|
// store the glSurfaceView in JmeAndroidSystem for future use
|
|
|
|
JmeAndroidSystem.setView(view); |
|
|
|
JmeAndroidSystem.setView(view); |
|
|
|
createLayout(); |
|
|
|
createLayout(); |
|
|
|
|
|
|
|
view.addOnLayoutChangeListener(this); |
|
|
|
return frameLayout; |
|
|
|
return frameLayout; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -346,6 +362,19 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onDestroyView() { |
|
|
|
public void onDestroyView() { |
|
|
|
logger.fine("onDestroyView"); |
|
|
|
logger.fine("onDestroyView"); |
|
|
|
|
|
|
|
if (splashImageView != null) { |
|
|
|
|
|
|
|
((ViewGroup) splashImageView.getParent()).removeView(splashImageView); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (view.getParent() != null) { |
|
|
|
|
|
|
|
((ViewGroup) view.getParent()).removeView(view); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (frameLayout != null && frameLayout.getParent() != null) { |
|
|
|
|
|
|
|
((ViewGroup) frameLayout.getParent()).removeView(frameLayout); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
view.removeOnLayoutChangeListener(this); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
splashImageView = null; |
|
|
|
|
|
|
|
frameLayout = null; |
|
|
|
view = null; |
|
|
|
view = null; |
|
|
|
JmeAndroidSystem.setView(null); |
|
|
|
JmeAndroidSystem.setView(null); |
|
|
|
|
|
|
|
|
|
|
@ -490,9 +519,9 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
} |
|
|
|
} |
|
|
|
frameLayout.addView(splashImageView, lp); |
|
|
|
frameLayout.addView(splashImageView, lp); |
|
|
|
|
|
|
|
|
|
|
|
logger.log(Level.FINE, "Splash Screen Created"); |
|
|
|
logger.fine("Splash Screen Created"); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
logger.log(Level.FINE, "Splash Screen Skipped."); |
|
|
|
logger.fine("Splash Screen Skipped."); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -509,10 +538,10 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
logger.log(Level.FINE, "splashImageView is null"); |
|
|
|
logger.fine("splashImageView is null"); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
logger.log(Level.FINE, "frameLayout is null"); |
|
|
|
logger.fine("frameLayout is null"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -644,4 +673,48 @@ public class AndroidHarnessFragment extends Fragment implements TouchListener, D |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void onLayoutChange(View v, |
|
|
|
|
|
|
|
int left, int top, int right, int bottom, |
|
|
|
|
|
|
|
int oldLeft, int oldTop, int oldRight, int oldBottom) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (v.equals(view)) { |
|
|
|
|
|
|
|
// logger.log(Level.INFO, "surfaceview layout changed. left: {0}, top: {1}, right: {2}, bottom: {3}",
|
|
|
|
|
|
|
|
// new Object[]{left, top, right, bottom});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (v.equals(view) && maxResolutionDimension > 0) { |
|
|
|
|
|
|
|
int newWidth = right-left; |
|
|
|
|
|
|
|
int newHeight = bottom-top; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (viewWidth != newWidth || viewHeight != newHeight) { |
|
|
|
|
|
|
|
logger.log(Level.FINE, "SurfaceView layout changed: old width: {0}, old height: {1}, new width: {2}, new height: {3}", |
|
|
|
|
|
|
|
new Object[]{viewWidth, viewHeight, newWidth, newHeight}); |
|
|
|
|
|
|
|
viewWidth = newWidth; |
|
|
|
|
|
|
|
viewHeight = newHeight; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int fixedSizeWidth = viewWidth; |
|
|
|
|
|
|
|
int fixedSizeHeight = viewHeight; |
|
|
|
|
|
|
|
if (viewWidth > viewHeight && viewWidth > maxResolutionDimension) { |
|
|
|
|
|
|
|
// landscape
|
|
|
|
|
|
|
|
fixedSizeWidth = maxResolutionDimension; |
|
|
|
|
|
|
|
fixedSizeHeight = (int)(maxResolutionDimension * ((float)viewHeight / (float)viewWidth)); |
|
|
|
|
|
|
|
} else if (viewHeight > viewWidth && viewHeight > maxResolutionDimension) { |
|
|
|
|
|
|
|
// portrait
|
|
|
|
|
|
|
|
fixedSizeWidth = (int)(maxResolutionDimension * ((float)viewWidth / (float)viewHeight)); |
|
|
|
|
|
|
|
fixedSizeHeight = maxResolutionDimension; |
|
|
|
|
|
|
|
} else if (viewWidth == viewHeight && viewWidth > maxResolutionDimension) { |
|
|
|
|
|
|
|
fixedSizeWidth = maxResolutionDimension; |
|
|
|
|
|
|
|
fixedSizeHeight = maxResolutionDimension; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// set the surfaceview resolution if the size != current view size
|
|
|
|
|
|
|
|
if (fixedSizeWidth != viewWidth || fixedSizeHeight != viewHeight) { |
|
|
|
|
|
|
|
logger.log(Level.FINE, "setting surfaceview resolution to width: {0}, height: {1}", |
|
|
|
|
|
|
|
new Object[]{fixedSizeWidth, fixedSizeHeight}); |
|
|
|
|
|
|
|
view.getHolder().setFixedSize(fixedSizeWidth, fixedSizeHeight); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|