diff --git a/sdk/jme3-android/src/com/jme3/gde/android/AndroidSdkTool.java b/sdk/jme3-android/src/com/jme3/gde/android/AndroidSdkTool.java index 066265e74..21340ab6e 100644 --- a/sdk/jme3-android/src/com/jme3/gde/android/AndroidSdkTool.java +++ b/sdk/jme3-android/src/com/jme3/gde/android/AndroidSdkTool.java @@ -243,6 +243,7 @@ public class AndroidSdkTool { } updateAndroidManifest(project); updateAndroidApplicationName(project, name); + updateAndroidLayout(project, packag); } public static void updateProject(Project project, String target, String name) { @@ -411,17 +412,79 @@ public class AndroidSdkTool { } } + private static void updateAndroidLayout(Project project, String packag) { + FileObject layout = project.getProjectDirectory().getFileObject("mobile/res/layout/main.xml"); + if (layout == null) { + Logger.getLogger(AndroidSdkTool.class.getName()).log(Level.WARNING, "Cannot find layout"); + return; + } + InputStream in = null; + FileLock lock = null; + OutputStream out = null; + try { + in = layout.getInputStream(); + Document configuration = XMLUtil.parse(new InputSource(in), false, false, null, null); + in.close(); + in = null; + + Element textViewElement = XmlHelper.findChildElement(configuration.getDocumentElement(), "TextView"); + + Element fragmentElement = configuration.createElement("fragment"); + fragmentElement.setAttribute("android:name", packag+".MainActivity$JmeFragment"); + fragmentElement.setAttribute("android:id", "@+id/jmeFragment"); + fragmentElement.setAttribute("android:layout_width", "match_parent"); + fragmentElement.setAttribute("android:layout_height", "match_parent"); + + if (textViewElement == null) { + configuration.getDocumentElement().appendChild(fragmentElement); + } else { + configuration.getDocumentElement().replaceChild(fragmentElement, textViewElement); + } + + lock = layout.lock(); + out = layout.getOutputStream(lock); + XMLUtil.write(configuration, out, "UTF-8"); + out.close(); + out = null; + lock.releaseLock(); + lock = null; + + } catch (SAXException ex) { + Exceptions.printStackTrace(ex); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } finally { + if (lock != null) { + lock.releaseLock(); + } + try { + if (in != null) { + in.close(); + } + if (out != null) { + out.close(); + } + } catch (IOException ex1) { + Exceptions.printStackTrace(ex1); + } + } + } + private static String mainActivityString(String mainClass, String packag) { String str = "package " + packag + ";\n" + " \n" - + "import android.content.pm.ActivityInfo;\n" - + "import com.jme3.app.AndroidHarness;\n" + + "import com.jme3.app.DefaultAndroidProfiler;\n" + + "import android.app.Activity;\n" + + "import android.app.FragmentManager;\n" + + "import android.os.Bundle;\n" + + "import android.view.Window;\n" + + "import android.view.WindowManager;\n" + + "import com.jme3.app.AndroidHarnessFragment;\n" + "import java.util.logging.Level;\n" + "import java.util.logging.LogManager;\n" + " \n" - + "public class MainActivity extends AndroidHarness{\n" - + " \n" + + "public class MainActivity extends Activity {\n" + " /*\n" + " * Note that you can ignore the errors displayed in this file,\n" + " * the android project will build regardless.\n" @@ -430,18 +493,72 @@ public class AndroidSdkTool { + " */\n" + " \n" + " public MainActivity(){\n" - + " // Set the application class to run\n" - + " appClass = \"" + mainClass + "\";\n" - + " // Exit Dialog title & message\n" - + " exitDialogTitle = \"Exit?\";\n" - + " exitDialogMessage = \"Press Yes\";\n" - + " // Enable MouseEvents being generated from TouchEvents (default = true)\n" - + " mouseEventsEnabled = true;\n" + " // Set the default logging level (default=Level.INFO, Level.ALL=All Debug Info)\n" + " LogManager.getLogManager().getLogger(\"\").setLevel(Level.INFO);\n" + " }\n" + " \n" + + " @Override\n" + + " protected void onCreate(Bundle savedInstanceState) {\n" + + " super.onCreate(savedInstanceState);\n" + + " // Set window fullscreen and remove title bar\n" + + " requestWindowFeature(Window.FEATURE_NO_TITLE);\n" + + " getWindow().setFlags(\n" + + " WindowManager.LayoutParams.FLAG_FULLSCREEN,\n" + + " WindowManager.LayoutParams.FLAG_FULLSCREEN);\n" + + " setContentView(R.layout.main);\n" + + " \n" + + " // find the fragment\n" + + " FragmentManager fm = getFragmentManager();\n" + + " AndroidHarnessFragment jmeFragment =\n" + + " (AndroidHarnessFragment) fm.findFragmentById(R.id.jmeFragment);\n" + + " \n" + + " // uncomment the next line to add the default android profiler to the project\n" + + " //jmeFragment.getJmeApplication().setAppProfiler(new DefaultAndroidProfiler());\n" + + " }\n" + + " \n" + + " \n" + + " public static class JmeFragment extends AndroidHarnessFragment {\n" + + " public JmeFragment() {\n" + + " // Set main project class (fully qualified path)\n" + + " appClass = \"" + mainClass + "\";\n" + + " \n" + + " // Set the desired EGL configuration\n" + + " eglBitsPerPixel = 24;\n" + + " eglAlphaBits = 0;\n" + + " eglDepthBits = 16;\n" + + " eglSamples = 0;\n" + + " eglStencilBits = 0;\n" + + " \n" + + " // Set the maximum framerate\n" + + " // (default = -1 for unlimited)\n" + + " frameRate = -1;\n" + + " \n" + + " // Set the maximum resolution dimension\n" + + " // (the smaller side, height or width, is set automatically\n" + + " // to maintain the original device screen aspect ratio)\n" + + " // (default = -1 to match device screen resolution)\n" + + " maxResolutionDimension = -1;\n" + + " \n" + + " // Set input configuration settings\n" + + " joystickEventsEnabled = false;\n" + + " keyEventsEnabled = true;\n" + + " mouseEventsEnabled = true;\n" + + " \n" + + " // Set application exit settings\n" + + " finishOnAppStop = true;\n" + + " handleExitHook = true;\n" + + " exitDialogTitle = \"Do you want to exit?\";\n" + + " exitDialogMessage = \"Use your home key to bring this app into the background or exit to terminate it.\";\n" + + " \n" + + " // Set splash screen resource id, if used\n" + + " // (default = 0, no splash screen)\n" + + " // For example, if the image file name is \"splash\"...\n" + + " // splashPicID = R.drawable.splash;\n" + + " splashPicID = 0;\n" + + " }\n" + + " }\n" + "}\n"; + return str; }