git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10382 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
142905654f
commit
9bb4efdeb5
@ -0,0 +1 @@ |
|||||||
|
X-Comment: Created with jMonkeyPlatform |
@ -0,0 +1,76 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!-- You may freely edit this file. See commented blocks below for --> |
||||||
|
<!-- some examples of how to customize the build. --> |
||||||
|
<!-- (If you delete it and reopen the project it will be recreated.) --> |
||||||
|
<!-- By default, only the Clean and Build commands use this build script. --> |
||||||
|
<!-- Commands such as Run, Debug, and Test only use this build script if --> |
||||||
|
<!-- the Compile on Save feature is turned off for the project. --> |
||||||
|
<!-- You can turn off the Compile on Save (or Deploy on Save) setting --> |
||||||
|
<!-- in the project's Project Properties dialog box.--> |
||||||
|
<project name="BasicGameTemplate" default="default" basedir="."> |
||||||
|
<description>Builds, tests, and runs the project BasicGameTemplate.</description> |
||||||
|
<import file="nbproject/build-impl.xml"/> |
||||||
|
|
||||||
|
<!-- |
||||||
|
|
||||||
|
There exist several targets which are by default empty and which can be |
||||||
|
used for execution of your tasks. These targets are usually executed |
||||||
|
before and after some main targets. They are: |
||||||
|
|
||||||
|
-pre-init: called before initialization of project properties |
||||||
|
-post-init: called after initialization of project properties |
||||||
|
-pre-compile: called before javac compilation |
||||||
|
-post-compile: called after javac compilation |
||||||
|
-pre-compile-single: called before javac compilation of single file |
||||||
|
-post-compile-single: called after javac compilation of single file |
||||||
|
-pre-compile-test: called before javac compilation of JUnit tests |
||||||
|
-post-compile-test: called after javac compilation of JUnit tests |
||||||
|
-pre-compile-test-single: called before javac compilation of single JUnit test |
||||||
|
-post-compile-test-single: called after javac compilation of single JUunit test |
||||||
|
-pre-jar: called before JAR building |
||||||
|
-post-jar: called after JAR building |
||||||
|
-post-clean: called after cleaning build products |
||||||
|
|
||||||
|
(Targets beginning with '-' are not intended to be called on their own.) |
||||||
|
|
||||||
|
Example of inserting an obfuscator after compilation could look like this: |
||||||
|
|
||||||
|
<target name="-post-compile"> |
||||||
|
<obfuscate> |
||||||
|
<fileset dir="${build.classes.dir}"/> |
||||||
|
</obfuscate> |
||||||
|
</target> |
||||||
|
|
||||||
|
For list of available properties check the imported |
||||||
|
nbproject/build-impl.xml file. |
||||||
|
|
||||||
|
|
||||||
|
Another way to customize the build is by overriding existing main targets. |
||||||
|
The targets of interest are: |
||||||
|
|
||||||
|
-init-macrodef-javac: defines macro for javac compilation |
||||||
|
-init-macrodef-junit: defines macro for junit execution |
||||||
|
-init-macrodef-debug: defines macro for class debugging |
||||||
|
-init-macrodef-java: defines macro for class execution |
||||||
|
-do-jar-with-manifest: JAR building (if you are using a manifest) |
||||||
|
-do-jar-without-manifest: JAR building (if you are not using a manifest) |
||||||
|
run: execution of project |
||||||
|
-javadoc-build: Javadoc generation |
||||||
|
test-report: JUnit report generation |
||||||
|
|
||||||
|
An example of overriding the target for project execution could look like this: |
||||||
|
|
||||||
|
<target name="run" depends="BasicGameTemplate-impl.jar"> |
||||||
|
<exec dir="bin" executable="launcher.exe"> |
||||||
|
<arg file="${dist.jar}"/> |
||||||
|
</exec> |
||||||
|
</target> |
||||||
|
|
||||||
|
Notice that the overridden target depends on the jar target and not only on |
||||||
|
the compile target as the regular run target does. Again, for a list of available |
||||||
|
properties which you can use, check the target you are overriding in the |
||||||
|
nbproject/build-impl.xml file. |
||||||
|
|
||||||
|
--> |
||||||
|
|
||||||
|
</project> |
@ -0,0 +1,22 @@ |
|||||||
|
<jnlp spec="1.0+" codebase="${jnlp.codebase}" href="launch.jnlp"> |
||||||
|
<information> |
||||||
|
<title>${APPLICATION.TITLE}</title> |
||||||
|
<vendor>${APPLICATION.VENDOR}</vendor> |
||||||
|
<homepage href="${APPLICATION.HOMEPAGE}"/> |
||||||
|
<description>${APPLICATION.DESC}</description> |
||||||
|
<description kind="short">${APPLICATION.DESC.SHORT}</description> |
||||||
|
<!--${JNLP.ICONS}--> |
||||||
|
<!--${JNLP.OFFLINE.ALLOWED}--> |
||||||
|
</information> |
||||||
|
<!--${JNLP.SECURITY}--> |
||||||
|
<resources> |
||||||
|
<!--${JNLP.RESOURCES.RUNTIME}--> |
||||||
|
<!--${JNLP.RESOURCES.MAIN.JAR}--> |
||||||
|
<!--${JNLP.RESOURCES.JARS}--> |
||||||
|
<jar href='lib/assets.jar'/> |
||||||
|
<!--${JNLP.RESOURCES.EXTENSIONS}--> |
||||||
|
</resources> |
||||||
|
<application-desc main-class="${jnlp.main.class}"> |
||||||
|
<!--${JNLP.APPLICATION.ARGS}--> |
||||||
|
</application-desc> |
||||||
|
</jnlp> |
@ -0,0 +1,15 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.jmonkeyengine.tests"> |
||||||
|
<application android:label="@string/app_name"> |
||||||
|
<activity android:label="@string/app_name" android:name="MainActivity" android:launchMode="singleTask"> |
||||||
|
<intent-filter> |
||||||
|
<action android:name="android.intent.action.MAIN"/> |
||||||
|
<category android:name="android.intent.category.LAUNCHER"/> |
||||||
|
</intent-filter> |
||||||
|
</activity> |
||||||
|
<activity android:label="@string/app_name" android:name="TestsHarness" android:launchMode="singleTask" android:screenOrientation="landscape"> |
||||||
|
</activity> |
||||||
|
</application> |
||||||
|
<uses-sdk android:minSdkVersion="8"/> |
||||||
|
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/> |
||||||
|
</manifest> |
@ -0,0 +1,17 @@ |
|||||||
|
# This file is used to override default values used by the Ant build system. |
||||||
|
# |
||||||
|
# This file must be checked into Version Control Systems, as it is |
||||||
|
# integral to the build system of your project. |
||||||
|
|
||||||
|
# This file is only used by the Ant script. |
||||||
|
|
||||||
|
# You can use this to override default values such as |
||||||
|
# 'source.dir' for the location of your java source folder and |
||||||
|
# 'out.dir' for the location of your output folder. |
||||||
|
|
||||||
|
# You can also use it define how the release builds are signed by declaring |
||||||
|
# the following properties: |
||||||
|
# 'key.store' for the location of your keystore and |
||||||
|
# 'key.alias' for the name of the key to use. |
||||||
|
# The password will be asked during the build when you use the 'release' target. |
||||||
|
|
@ -0,0 +1,92 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project name="jMonkeyEngine Test Applications" default="help"> |
||||||
|
|
||||||
|
<!-- The local.properties file is created and updated by the 'android' tool. |
||||||
|
It contains the path to the SDK. It should *NOT* be checked into |
||||||
|
Version Control Systems. --> |
||||||
|
<property file="local.properties" /> |
||||||
|
|
||||||
|
<!-- The ant.properties file can be created by you. It is only edited by the |
||||||
|
'android' tool to add properties to it. |
||||||
|
This is the place to change some Ant specific build properties. |
||||||
|
Here are some properties you may want to change/update: |
||||||
|
|
||||||
|
source.dir |
||||||
|
The name of the source directory. Default is 'src'. |
||||||
|
out.dir |
||||||
|
The name of the output directory. Default is 'bin'. |
||||||
|
|
||||||
|
For other overridable properties, look at the beginning of the rules |
||||||
|
files in the SDK, at tools/ant/build.xml |
||||||
|
|
||||||
|
Properties related to the SDK location or the project target should |
||||||
|
be updated using the 'android' tool with the 'update' action. |
||||||
|
|
||||||
|
This file is an integral part of the build system for your |
||||||
|
application and should be checked into Version Control Systems. |
||||||
|
|
||||||
|
--> |
||||||
|
<property file="ant.properties" /> |
||||||
|
|
||||||
|
<!-- if sdk.dir was not set from one of the property file, then |
||||||
|
get it from the ANDROID_HOME env var. |
||||||
|
This must be done before we load project.properties since |
||||||
|
the proguard config can use sdk.dir --> |
||||||
|
<property environment="env" /> |
||||||
|
<condition property="sdk.dir" value="${env.ANDROID_HOME}"> |
||||||
|
<isset property="env.ANDROID_HOME" /> |
||||||
|
</condition> |
||||||
|
|
||||||
|
<!-- The project.properties file is created and updated by the 'android' |
||||||
|
tool, as well as ADT. |
||||||
|
|
||||||
|
This contains project specific properties such as project target, and library |
||||||
|
dependencies. Lower level build properties are stored in ant.properties |
||||||
|
(or in .classpath for Eclipse projects). |
||||||
|
|
||||||
|
This file is an integral part of the build system for your |
||||||
|
application and should be checked into Version Control Systems. --> |
||||||
|
<loadproperties srcFile="project.properties" /> |
||||||
|
|
||||||
|
<!-- quick check on sdk.dir --> |
||||||
|
<fail |
||||||
|
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." |
||||||
|
unless="sdk.dir" |
||||||
|
/> |
||||||
|
|
||||||
|
<!-- |
||||||
|
Import per project custom build rules if present at the root of the project. |
||||||
|
This is the place to put custom intermediary targets such as: |
||||||
|
-pre-build |
||||||
|
-pre-compile |
||||||
|
-post-compile (This is typically used for code obfuscation. |
||||||
|
Compiled code location: ${out.classes.absolute.dir} |
||||||
|
If this is not done in place, override ${out.dex.input.absolute.dir}) |
||||||
|
-post-package |
||||||
|
-post-build |
||||||
|
-pre-clean |
||||||
|
--> |
||||||
|
<import file="custom_rules.xml" optional="true" /> |
||||||
|
|
||||||
|
<!-- Import the actual build file. |
||||||
|
|
||||||
|
To customize existing targets, there are two options: |
||||||
|
- Customize only one target: |
||||||
|
- copy/paste the target into this file, *before* the |
||||||
|
<import> task. |
||||||
|
- customize it to your needs. |
||||||
|
- Customize the whole content of build.xml |
||||||
|
- copy/paste the content of the rules files (minus the top node) |
||||||
|
into this file, replacing the <import> task. |
||||||
|
- customize to your needs. |
||||||
|
|
||||||
|
*********************** |
||||||
|
****** IMPORTANT ****** |
||||||
|
*********************** |
||||||
|
In all cases you must update the value of version-tag below to read 'custom' instead of an integer, |
||||||
|
in order to avoid having your file be overridden by tools such as "android update project" |
||||||
|
--> |
||||||
|
<!-- version-tag: 1 --> |
||||||
|
<import file="${sdk.dir}/tools/ant/build.xml" /> |
||||||
|
|
||||||
|
</project> |
@ -0,0 +1,20 @@ |
|||||||
|
# To enable ProGuard in your project, edit project.properties |
||||||
|
# to define the proguard.config property as described in that file. |
||||||
|
# |
||||||
|
# Add project specific ProGuard rules here. |
||||||
|
# By default, the flags in this file are appended to flags specified |
||||||
|
# in ${sdk.dir}/tools/proguard/proguard-android.txt |
||||||
|
# You can edit the include path and order by changing the ProGuard |
||||||
|
# include property in project.properties. |
||||||
|
# |
||||||
|
# For more details, see |
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html |
||||||
|
|
||||||
|
# Add any project specific keep options here: |
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following |
||||||
|
# and specify the fully qualified class name to the JavaScript interface |
||||||
|
# class: |
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
||||||
|
# public *; |
||||||
|
#} |
@ -0,0 +1,14 @@ |
|||||||
|
# This file is automatically generated by Android Tools. |
||||||
|
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! |
||||||
|
# |
||||||
|
# This file must be checked in Version Control Systems. |
||||||
|
# |
||||||
|
# To customize properties used by the Ant build system edit |
||||||
|
# "ant.properties", and override values to adapt the script to your |
||||||
|
# project structure. |
||||||
|
# |
||||||
|
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): |
||||||
|
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt |
||||||
|
|
||||||
|
# Project target. |
||||||
|
target=android-8 |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 134 B |
After Width: | Height: | Size: 124 B |
@ -0,0 +1,13 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:orientation="vertical" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
> |
||||||
|
<TextView |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="Hello World, MainActivity" |
||||||
|
/> |
||||||
|
</LinearLayout> |
||||||
|
|
@ -0,0 +1,119 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:id="@+id/layoutTestChooser" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
android:background="#FFFFFF" |
||||||
|
> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/lblTitle" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_alignParentLeft="true" |
||||||
|
android:layout_alignParentTop="true" |
||||||
|
android:layout_marginTop="10dp" |
||||||
|
android:layout_marginLeft="10dp" |
||||||
|
android:layout_marginRight="10dp" |
||||||
|
android:text="Choose a demo to start:" |
||||||
|
android:textSize="20sp" |
||||||
|
android:textColor="#000000" |
||||||
|
/> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/layoutFilter" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_below="@id/lblTitle" |
||||||
|
android:layout_marginBottom="10dp" |
||||||
|
android:layout_marginTop="10dp" |
||||||
|
android:layout_marginLeft="10dp" |
||||||
|
android:layout_marginRight="10dp" |
||||||
|
android:orientation="horizontal" |
||||||
|
> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/lblFindTitle" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_marginRight="10dp" |
||||||
|
android:text="Find:" |
||||||
|
android:textSize="20sp" |
||||||
|
android:textColor="#000000" |
||||||
|
/> |
||||||
|
|
||||||
|
<EditText |
||||||
|
android:id="@+id/txtFilter" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" |
||||||
|
android:ems="10" |
||||||
|
android:hint="Enter a Filter" |
||||||
|
android:inputType="text" |
||||||
|
android:textSize="20sp" |
||||||
|
android:textColor="#000000" |
||||||
|
/> |
||||||
|
|
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/layoutButtons" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_alignParentBottom="true" |
||||||
|
android:gravity="center" |
||||||
|
android:layout_marginTop="20dp" |
||||||
|
android:focusable="true" |
||||||
|
android:focusableInTouchMode="true" |
||||||
|
> |
||||||
|
|
||||||
|
<Button |
||||||
|
android:id="@+id/btnOK" |
||||||
|
android:layout_width="100dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="OK" |
||||||
|
android:layout_marginRight="20dp" |
||||||
|
android:textSize="20sp" |
||||||
|
android:textColor="#000000" |
||||||
|
/> |
||||||
|
|
||||||
|
<Button |
||||||
|
android:id="@+id/btnCancel" |
||||||
|
android:layout_width="100dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="Cancel" |
||||||
|
android:layout_marginLeft="20dp" |
||||||
|
android:textSize="20sp" |
||||||
|
android:textColor="#000000" |
||||||
|
/> |
||||||
|
<requestFocus/> |
||||||
|
|
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_above="@id/layoutButtons" |
||||||
|
android:layout_below="@id/layoutFilter" |
||||||
|
android:gravity="center" |
||||||
|
android:background="@drawable/selected" |
||||||
|
> |
||||||
|
|
||||||
|
<ListView |
||||||
|
android:id="@+id/listClasses" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
android:choiceMode="singleChoice" |
||||||
|
android:listSelector="@drawable/selected" |
||||||
|
android:layout_marginTop="5dp" |
||||||
|
android:layout_marginBottom="5dp" |
||||||
|
android:scrollbars="vertical" |
||||||
|
android:fadeScrollbars="false" |
||||||
|
android:textFilterEnabled="true" |
||||||
|
> |
||||||
|
|
||||||
|
</ListView> |
||||||
|
|
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
</RelativeLayout> |
@ -0,0 +1,30 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<LinearLayout |
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:id="@+id/layoutTestChooserRow" |
||||||
|
android:orientation="horizontal" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
android:padding="10dp"> |
||||||
|
|
||||||
|
<!-- |
||||||
|
<ImageView android:id="@+id/imgIcon" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
android:gravity="center_vertical" |
||||||
|
android:layout_marginRight="15dp" |
||||||
|
android:layout_marginTop="5dp" |
||||||
|
android:layout_marginBottom="5dp" /> |
||||||
|
--> |
||||||
|
|
||||||
|
<TextView android:id="@+id/txtClassName" |
||||||
|
android:layout_width="fill_parent" |
||||||
|
android:layout_height="fill_parent" |
||||||
|
android:gravity="center_vertical" |
||||||
|
android:textStyle="bold" |
||||||
|
android:textSize="22sp" |
||||||
|
android:textColor="#000000" |
||||||
|
android:layout_marginTop="5dp" |
||||||
|
android:layout_marginBottom="5dp" /> |
||||||
|
|
||||||
|
</LinearLayout> |
@ -0,0 +1,4 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<resources> |
||||||
|
<string name="app_name">jMonkeyEngine Test Applications</string> |
||||||
|
</resources> |
@ -0,0 +1,168 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jmonkeyengine.tests; |
||||||
|
|
||||||
|
import android.content.Context; |
||||||
|
import android.util.Log; |
||||||
|
import android.view.LayoutInflater; |
||||||
|
import android.view.View; |
||||||
|
import android.view.ViewGroup; |
||||||
|
import android.widget.ArrayAdapter; |
||||||
|
import android.widget.Filter; |
||||||
|
import android.widget.LinearLayout; |
||||||
|
import android.widget.TextView; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class CustomArrayAdapter extends ArrayAdapter<String> { |
||||||
|
private static final String TAG = "CustomArrayAdapter"; |
||||||
|
|
||||||
|
/* List of items */ |
||||||
|
private List<String> entries; |
||||||
|
private Context activity; |
||||||
|
|
||||||
|
/* Position of selected answer */ |
||||||
|
private int selectedPosition = -1; |
||||||
|
/* Background Color of selected item */ |
||||||
|
private int selectedBackgroundColor = 0xffff00; |
||||||
|
/* Background Color of non selected item */ |
||||||
|
private int nonselectedBackgroundColor = 0x000000; |
||||||
|
/* Background Drawable Resource ID of selected item */ |
||||||
|
private int selectedBackgroundResource = 0; |
||||||
|
/* Background Drawable Resource ID of non selected items */ |
||||||
|
private int nonselectedBackgroundResource = 0; |
||||||
|
|
||||||
|
/* Variables to support list filtering */ |
||||||
|
private ArrayList<String> filteredEntries; |
||||||
|
private Filter filter; |
||||||
|
|
||||||
|
public CustomArrayAdapter(Context context, int textViewResourceId, List<String> objects) { |
||||||
|
super(context, textViewResourceId, objects); |
||||||
|
activity = context; |
||||||
|
entries = new ArrayList<String>(objects); |
||||||
|
filteredEntries = new ArrayList<String>(objects); |
||||||
|
filter = new ClassNameFilter(); |
||||||
|
} |
||||||
|
|
||||||
|
/** Setter for selected item position */ |
||||||
|
public void setSelectedPosition(int selectedPosition) { |
||||||
|
this.selectedPosition = selectedPosition; |
||||||
|
} |
||||||
|
|
||||||
|
/** Setter for selected item background color */ |
||||||
|
public void setSelectedBackgroundColor(int selectedBackgroundColor) { |
||||||
|
this.selectedBackgroundColor = selectedBackgroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
/** Setter for non selected background color */ |
||||||
|
public void setNonSelectedBackgroundColor(int nonselectedBackgroundColor) { |
||||||
|
this.nonselectedBackgroundColor = nonselectedBackgroundColor; |
||||||
|
} |
||||||
|
|
||||||
|
/** Setter for selected item background resource id*/ |
||||||
|
public void setSelectedBackgroundResource(int selectedBackgroundResource) { |
||||||
|
this.selectedBackgroundResource = selectedBackgroundResource; |
||||||
|
} |
||||||
|
|
||||||
|
/** Setter for non selected background resource id*/ |
||||||
|
public void setNonSelectedBackgroundResource(int nonselectedBackgroundResource) { |
||||||
|
this.nonselectedBackgroundResource = nonselectedBackgroundResource; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public View getView(int position, View convertView, ViewGroup parent) { |
||||||
|
Log.i(TAG, "getView for position: " + position + " with selectedItem: " + selectedPosition); |
||||||
|
|
||||||
|
View v = convertView; |
||||||
|
ViewHolder holder; |
||||||
|
if (v == null) { |
||||||
|
LayoutInflater vi = |
||||||
|
(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
||||||
|
v = vi.inflate(R.layout.test_chooser_row, null); |
||||||
|
holder = new ViewHolder(); |
||||||
|
holder.textView = (TextView) v.findViewById(R.id.txtClassName); |
||||||
|
holder.layoutRow = (LinearLayout) v.findViewById(R.id.layoutTestChooserRow); |
||||||
|
v.setTag(holder); |
||||||
|
} else { |
||||||
|
holder=(ViewHolder)v.getTag(); |
||||||
|
} |
||||||
|
|
||||||
|
final String itemText = filteredEntries.get(position); |
||||||
|
if (itemText != null) { |
||||||
|
holder.textView.setText(itemText); |
||||||
|
if (position == selectedPosition) { |
||||||
|
Log.i(TAG, "setting Background Color to: " + selectedBackgroundColor); |
||||||
|
// holder.textView.setBackgroundColor(selectedBackgroundColor);
|
||||||
|
// holder.textView.setBackgroundResource(selectedBackgroundResource);
|
||||||
|
holder.layoutRow.setBackgroundResource(selectedBackgroundResource); |
||||||
|
} else { |
||||||
|
Log.i(TAG, "setting Background Color to: " + nonselectedBackgroundColor); |
||||||
|
// holder.textView.setBackgroundColor(nonselectedBackgroundColor);
|
||||||
|
// holder.textView.setBackgroundResource(nonselectedBackgroundResource);
|
||||||
|
holder.layoutRow.setBackgroundResource(nonselectedBackgroundResource); |
||||||
|
} |
||||||
|
} |
||||||
|
return v; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Filter getFilter(){ |
||||||
|
if(filter == null){ |
||||||
|
filter = new ClassNameFilter(); |
||||||
|
} |
||||||
|
return filter; |
||||||
|
} |
||||||
|
|
||||||
|
public static class ViewHolder{ |
||||||
|
public TextView textView; |
||||||
|
public LinearLayout layoutRow; |
||||||
|
} |
||||||
|
|
||||||
|
private class ClassNameFilter extends Filter{ |
||||||
|
@Override |
||||||
|
protected FilterResults performFiltering(CharSequence constraint){ |
||||||
|
FilterResults results = new FilterResults(); |
||||||
|
String prefix = constraint.toString().toLowerCase(); |
||||||
|
Log.i(TAG, "performFiltering: entries size: " + entries.size()); |
||||||
|
if (prefix == null || prefix.length() == 0){ |
||||||
|
ArrayList<String> list = new ArrayList<String>(entries); |
||||||
|
results.values = list; |
||||||
|
results.count = list.size(); |
||||||
|
Log.i(TAG, "clearing filter with size: " + list.size()); |
||||||
|
}else{ |
||||||
|
final ArrayList<String> list = new ArrayList<String>(entries); |
||||||
|
final ArrayList<String> nlist = new ArrayList<String>(); |
||||||
|
int count = list.size(); |
||||||
|
|
||||||
|
for (int i = 0; i<count; i++){ |
||||||
|
if(list.get(i).toLowerCase().contains(prefix)){ |
||||||
|
nlist.add(list.get(i)); |
||||||
|
} |
||||||
|
results.values = nlist; |
||||||
|
results.count = nlist.size(); |
||||||
|
} |
||||||
|
Log.i(TAG, "filtered list size: " + nlist.size() + ", entries size: " + entries.size()); |
||||||
|
} |
||||||
|
Log.i(TAG, "Returning filter count: " + results.count); |
||||||
|
return results; |
||||||
|
} |
||||||
|
|
||||||
|
@SuppressWarnings("unchecked") |
||||||
|
@Override |
||||||
|
protected void publishResults(CharSequence constraint, FilterResults results) { |
||||||
|
filteredEntries = (ArrayList<String>)results.values; |
||||||
|
notifyDataSetChanged(); |
||||||
|
clear(); |
||||||
|
int count = filteredEntries.size(); |
||||||
|
for(int i = 0; i<count; i++){ |
||||||
|
add(filteredEntries.get(i)); |
||||||
|
notifyDataSetInvalidated(); |
||||||
|
} |
||||||
|
Log.i(TAG, "publishing results with size: " + count); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,310 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jmonkeyengine.tests; |
||||||
|
|
||||||
|
import android.app.Activity; |
||||||
|
import android.content.Intent; |
||||||
|
import android.content.pm.ApplicationInfo; |
||||||
|
import android.os.Bundle; |
||||||
|
import android.text.Editable; |
||||||
|
import android.text.TextWatcher; |
||||||
|
import android.util.Log; |
||||||
|
import android.view.View; |
||||||
|
import android.widget.AdapterView; |
||||||
|
import android.widget.AdapterView.OnItemClickListener; |
||||||
|
import android.widget.Button; |
||||||
|
import android.widget.EditText; |
||||||
|
import android.widget.ListView; |
||||||
|
import android.widget.Toast; |
||||||
|
import com.jme3.app.Application; |
||||||
|
import dalvik.system.DexFile; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Enumeration; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
//TODO: Add settings menu items for MouseEvents, JoystickEvents, and device orientation
|
||||||
|
//TODO: Create onscreen virtual keypad for triggering normal mapped keys used by test apps or modify test apps for touch with onscreen keypad
|
||||||
|
//TODO: Go through each test and see if any classes need to be added to the exclusions list
|
||||||
|
|
||||||
|
/** |
||||||
|
* Main Activity started by the application. Users select different jME3 test |
||||||
|
* applications that are started via TestsHarness Activity. |
||||||
|
* @author iwgeric |
||||||
|
*/ |
||||||
|
public class MainActivity extends Activity implements OnItemClickListener, View.OnClickListener, TextWatcher { |
||||||
|
private static final String TAG = "MainActivity"; |
||||||
|
|
||||||
|
/** |
||||||
|
* Static String to pass the key for the selected test app to the |
||||||
|
* TestsHarness class to start the application. Also used to store the |
||||||
|
* current selection to the savedInstanceState Bundle. |
||||||
|
*/ |
||||||
|
public static final String SELECTED_APP_CLASS = "Selected_App_Class"; |
||||||
|
|
||||||
|
/** |
||||||
|
* Static String to pass the key for the selected list position to the |
||||||
|
* savedInstanceState Bundle so the list position can be restored after |
||||||
|
* exiting the test application. |
||||||
|
*/ |
||||||
|
public static final String SELECTED_LIST_POSITION = "Selected_List_Position"; |
||||||
|
|
||||||
|
/* Fields to contain the current position and display contents of the spinner */ |
||||||
|
private int currentPosition = 0; |
||||||
|
private String currentSelection = ""; |
||||||
|
private List<String> classNames = new ArrayList<String>(); |
||||||
|
private List<String> exclusions = new ArrayList<String>(); |
||||||
|
private String rootPackage; |
||||||
|
|
||||||
|
/* ListView that displays the test application class names. */ |
||||||
|
private ListView listClasses; |
||||||
|
|
||||||
|
/* ArrayAdapter connects the spinner widget to array-based data. */ |
||||||
|
private CustomArrayAdapter arrayAdapter; |
||||||
|
|
||||||
|
/* Buttons to start application or stop the activity. */ |
||||||
|
private Button btnOK; |
||||||
|
private Button btnCancel; |
||||||
|
|
||||||
|
/* Filter Edit Box */ |
||||||
|
EditText editFilterText; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Called when the activity is first created. |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void onCreate(Bundle savedInstanceState) { |
||||||
|
super.onCreate(savedInstanceState); |
||||||
|
|
||||||
|
if (savedInstanceState != null) { |
||||||
|
Log.i(TAG, "Restoring selections in onCreate: " |
||||||
|
+ "position: " + savedInstanceState.getInt(SELECTED_LIST_POSITION, 0) |
||||||
|
+ "class: " + savedInstanceState.getString(SELECTED_APP_CLASS) |
||||||
|
); |
||||||
|
currentPosition = savedInstanceState.getInt(SELECTED_LIST_POSITION, 0); |
||||||
|
currentSelection = savedInstanceState.getString(SELECTED_APP_CLASS); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* Set content view and register views */ |
||||||
|
setContentView(R.layout.test_chooser_layout); |
||||||
|
btnOK = (Button) findViewById(R.id.btnOK); |
||||||
|
btnCancel = (Button) findViewById(R.id.btnCancel); |
||||||
|
listClasses = (ListView) findViewById(R.id.listClasses); |
||||||
|
editFilterText = (EditText) findViewById(R.id.txtFilter); |
||||||
|
|
||||||
|
|
||||||
|
/* Define the root package to start with */ |
||||||
|
rootPackage = "jme3test"; |
||||||
|
|
||||||
|
/* Create an array of Strings to define which classes to exclude */ |
||||||
|
exclusions.add("$"); // inner classes
|
||||||
|
exclusions.add("TestChooser"); // Desktop test chooser class
|
||||||
|
exclusions.add("awt"); // Desktop test chooser class
|
||||||
|
|
||||||
|
// mExclusions.add("");
|
||||||
|
|
||||||
|
/* |
||||||
|
* Read the class names from the dex file and filter based on |
||||||
|
* name and super class. |
||||||
|
*/ |
||||||
|
|
||||||
|
Log.i(TAG, "Composing Test list..."); |
||||||
|
|
||||||
|
ApplicationInfo ai = this.getApplicationInfo(); |
||||||
|
String classPath = ai.sourceDir; |
||||||
|
DexFile dex = null; |
||||||
|
Enumeration<String> apkClassNames = null; |
||||||
|
try { |
||||||
|
dex = new DexFile(classPath); |
||||||
|
apkClassNames = dex.entries(); |
||||||
|
while (apkClassNames.hasMoreElements()) { |
||||||
|
String className = apkClassNames.nextElement(); |
||||||
|
if (checkClassName(className) && checkClassType(className)) { |
||||||
|
classNames.add(className); |
||||||
|
} |
||||||
|
// classNames.add(className);
|
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} finally { |
||||||
|
try { |
||||||
|
dex.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* Create a backing Adapter for the List View from a list of the |
||||||
|
* classes. The list is defined by array of class names. |
||||||
|
*/ |
||||||
|
arrayAdapter = new CustomArrayAdapter( |
||||||
|
this, |
||||||
|
R.layout.test_chooser_row, // text view to display selection
|
||||||
|
classNames // array of strings to display
|
||||||
|
); |
||||||
|
|
||||||
|
/* Set the resource id for selected and non selected backgrounds */ |
||||||
|
Log.i(TAG, "Setting Adapter Background Resource IDs"); |
||||||
|
arrayAdapter.setSelectedBackgroundResource(R.drawable.selected); |
||||||
|
arrayAdapter.setNonSelectedBackgroundResource(R.drawable.nonselected); |
||||||
|
|
||||||
|
/* Attach the Adapter to the spinner */ |
||||||
|
Log.i(TAG, "Setting ListView Adapter"); |
||||||
|
listClasses.setAdapter(arrayAdapter); |
||||||
|
|
||||||
|
/* Set initial selection for the list */ |
||||||
|
setSelection(currentPosition); |
||||||
|
|
||||||
|
/* Set Click and Text Changed listeners */ |
||||||
|
listClasses.setOnItemClickListener(this); |
||||||
|
btnOK.setOnClickListener(this); |
||||||
|
btnCancel.setOnClickListener(this); |
||||||
|
editFilterText.addTextChangedListener(this); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* User selected an application. Sets the current selection and redraws |
||||||
|
* the list view to highlight the selected item. |
||||||
|
* @param parent AdapterView tied to the list |
||||||
|
* @param view The ListView |
||||||
|
* @param position Selection position in the list of class names |
||||||
|
* @param id |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
||||||
|
setSelection(position); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* User clicked a view on the screen. Check for the OK and Cancel buttons |
||||||
|
* and either start the applicaiton or exit. |
||||||
|
* @param view |
||||||
|
*/ |
||||||
|
public void onClick(View view) { |
||||||
|
if (view.equals(btnOK)) { |
||||||
|
/* Get selected class, pack it in the intent and start the test app */ |
||||||
|
Log.i(TAG, "User selected OK for class: " + currentSelection); |
||||||
|
Intent intent = new Intent(this, TestsHarness.class); |
||||||
|
intent.putExtra(SELECTED_APP_CLASS, currentSelection); |
||||||
|
startActivity(intent); |
||||||
|
} else if (view.equals(btnCancel)) { |
||||||
|
/* Exit */ |
||||||
|
Log.i(TAG, "User selected Cancel"); |
||||||
|
finish(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Check class name to see if the class is in the root package and if it |
||||||
|
* contains any of the exclusion strings |
||||||
|
* @param className Class name to check |
||||||
|
* @return true if the check passes, false otherwise |
||||||
|
*/ |
||||||
|
private boolean checkClassName(String className) { |
||||||
|
boolean include = true; |
||||||
|
/* check to see if the class in inside the rootPackage package */ |
||||||
|
if (className.startsWith(rootPackage)) { |
||||||
|
/* check to see if the class contains any of the exlusion strings */ |
||||||
|
for (int i = 0; i < exclusions.size(); i++) { |
||||||
|
if (className.contains(exclusions.get(i))) { |
||||||
|
Log.i(TAG, "Skipping Class " + className + ". Includes exclusion string: " + exclusions.get(i) + "."); |
||||||
|
include = false; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
include = false; |
||||||
|
Log.i(TAG, "Skipping Class " + className + ". Not in the root package: " + rootPackage + "."); |
||||||
|
} |
||||||
|
return include; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Check to see if the class extends Application or SimpleApplication |
||||||
|
* @param className Class name to check |
||||||
|
* @return true if the check passes, false otherwise |
||||||
|
*/ |
||||||
|
private boolean checkClassType(String className) { |
||||||
|
boolean include = true; |
||||||
|
try { |
||||||
|
Class<?> clazz = (Class<?>)Class.forName(className); |
||||||
|
if (Application.class.isAssignableFrom(clazz)) { |
||||||
|
Log.i(TAG, "Class " + className + " is a jME Application"); |
||||||
|
} else { |
||||||
|
include = false; |
||||||
|
Log.i(TAG, "Skipping Class " + className + ". Not a jME Application"); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (ClassNotFoundException cnfe) { |
||||||
|
include = false; |
||||||
|
Log.i(TAG, "Skipping Class " + className + ". Class not found."); |
||||||
|
} |
||||||
|
return include; |
||||||
|
} |
||||||
|
|
||||||
|
private void setSelection(int position) { |
||||||
|
if (position == -1) { |
||||||
|
arrayAdapter.setSelectedPosition(0); |
||||||
|
currentPosition = -1; |
||||||
|
currentSelection = ""; |
||||||
|
listClasses.invalidateViews(); |
||||||
|
} else { |
||||||
|
arrayAdapter.setSelectedPosition(position); |
||||||
|
currentPosition = position; |
||||||
|
currentSelection = arrayAdapter.getItem(position); |
||||||
|
listClasses.invalidateViews(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onSaveInstanceState(Bundle savedInstanceState) { |
||||||
|
super.onSaveInstanceState(savedInstanceState); |
||||||
|
Log.i(TAG, "Saving selections in onSaveInstanceState: " |
||||||
|
+ "position: " + currentPosition + ", " |
||||||
|
+ "class: " + currentSelection |
||||||
|
); |
||||||
|
// Save current selections to the savedInstanceState.
|
||||||
|
// This bundle will be passed to onCreate if the process is
|
||||||
|
// killed and restarted.
|
||||||
|
savedInstanceState.putString(SELECTED_APP_CLASS, currentSelection); |
||||||
|
savedInstanceState.putInt(SELECTED_LIST_POSITION, currentPosition); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onRestoreInstanceState(Bundle savedInstanceState) { |
||||||
|
super.onRestoreInstanceState(savedInstanceState); |
||||||
|
// Log.i(TAG, "Restoring selections in onRestoreInstanceState: "
|
||||||
|
// + "position: " + savedInstanceState.getInt(SELECTED_LIST_POSITION, 0)
|
||||||
|
// + "class: " + savedInstanceState.getString(SELECTED_APP_CLASS)
|
||||||
|
// );
|
||||||
|
// //Restore selections from the savedInstanceState.
|
||||||
|
// // This bundle has also been passed to onCreate.
|
||||||
|
// currentPosition = savedInstanceState.getInt(SELECTED_LIST_POSITION, 0);
|
||||||
|
// currentSelection = savedInstanceState.getString(SELECTED_APP_CLASS);
|
||||||
|
} |
||||||
|
|
||||||
|
public void beforeTextChanged(CharSequence cs, int i, int i1, int i2) { |
||||||
|
} |
||||||
|
|
||||||
|
public void onTextChanged(CharSequence cs, int startPos, int beforePos, int count) { |
||||||
|
Log.i(TAG, "onTextChanged with cs: " + cs + ", startPos: " + startPos + ", beforePos: " + beforePos + ", count: " + count); |
||||||
|
// setSelection(-1);
|
||||||
|
arrayAdapter.getFilter().filter(cs.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
public void afterTextChanged(Editable edtbl) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onDestroy() { |
||||||
|
super.onDestroy(); |
||||||
|
editFilterText.removeTextChangedListener(this); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.jmonkeyengine.tests; |
||||||
|
|
||||||
|
import android.content.Intent; |
||||||
|
import com.jme3.app.AndroidHarness; |
||||||
|
import android.content.pm.ActivityInfo; |
||||||
|
import android.os.Bundle; |
||||||
|
import com.jme3.system.android.AndroidConfigChooser.ConfigType; |
||||||
|
|
||||||
|
public class TestsHarness extends AndroidHarness{ |
||||||
|
|
||||||
|
/* |
||||||
|
* Note that you can ignore the errors displayed in this file, |
||||||
|
* the android project will build regardless. |
||||||
|
* Install the 'Android' plugin under Tools->Plugins->Available Plugins |
||||||
|
* to get error checks and code completion for the Android project files. |
||||||
|
*/ |
||||||
|
|
||||||
|
public TestsHarness(){ |
||||||
|
// Set the application class to run
|
||||||
|
appClass = "mygame.Main"; |
||||||
|
// Try ConfigType.FASTEST; or ConfigType.LEGACY if you have problems
|
||||||
|
eglConfigType = ConfigType.BEST; |
||||||
|
// Exit Dialog title & message
|
||||||
|
exitDialogTitle = "Exit?"; |
||||||
|
exitDialogMessage = "Press Yes"; |
||||||
|
// Enable verbose logging
|
||||||
|
eglConfigVerboseLogging = false; |
||||||
|
// Choose screen orientation
|
||||||
|
screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; |
||||||
|
// Invert the MouseEvents X (default = true)
|
||||||
|
mouseEventsInvertX = true; |
||||||
|
// Invert the MouseEvents Y (default = true)
|
||||||
|
mouseEventsInvertY = true; |
||||||
|
// Add splash screen drawable resource
|
||||||
|
splashPicID = R.drawable.monkey256_9; |
||||||
|
// Simulate a joystick with Android device orientation data (default = false)
|
||||||
|
joystickEventsEnabled = false; |
||||||
|
// Simulate mouse events with Android touch input (default = true)
|
||||||
|
mouseEventsEnabled = true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onCreate(Bundle savedInstanceState) { |
||||||
|
Intent intent = getIntent(); |
||||||
|
appClass = intent.getStringExtra(MainActivity.SELECTED_APP_CLASS); |
||||||
|
|
||||||
|
super.onCreate(savedInstanceState); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!--assets-impl.xml v1.0--> |
||||||
|
<project name="assets-impl" basedir=".."> |
||||||
|
<target name="-init-assets"> |
||||||
|
<jar jarfile="${build.dir}/${assets.jar.name}" excludes="${assets.excludes}" basedir="${assets.folder.name}" compress="${assets.compress}"/> |
||||||
|
<property location="${assets.folder.name}" name="assets.dir.resolved"/> |
||||||
|
<property location="${build.dir}/${assets.jar.name}" name="assets.jar.resolved"/> |
||||||
|
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/> |
||||||
|
<pathconvert property="run.classpath.without.build.classes.dir"> |
||||||
|
<path path="${run.classpath}"/> |
||||||
|
<map from="${build.classes.dir.resolved}" to=""/> |
||||||
|
<map from="${assets.dir.resolved}" to="${assets.jar.resolved}"/> |
||||||
|
</pathconvert> |
||||||
|
</target> |
||||||
|
</project> |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,4 @@ |
|||||||
|
$label=Android Device |
||||||
|
$target.clean=clean clean-android |
||||||
|
$target.debug=run-android |
||||||
|
$target.run=run-android |
@ -0,0 +1,8 @@ |
|||||||
|
build.xml.data.CRC32=94bf7c61 |
||||||
|
build.xml.script.CRC32=79a29eb7 |
||||||
|
build.xml.stylesheet.CRC32=958a1d3e@1.32.1.45 |
||||||
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. |
||||||
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. |
||||||
|
nbproject/build-impl.xml.data.CRC32=e2c7a974 |
||||||
|
nbproject/build-impl.xml.script.CRC32=0bb68565 |
||||||
|
nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46 |
@ -0,0 +1,132 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!--mobile-impl.xml v0.18--> |
||||||
|
<project name="mobile-impl" basedir=".."> |
||||||
|
<condition property="android-adb-name" value="${file.separator}platform-tools${file.separator}adb.exe" else="${file.separator}platform-tools${file.separator}adb"> |
||||||
|
<os family="windows" /> |
||||||
|
</condition> |
||||||
|
|
||||||
|
<target name="run-android" depends="-flag-no-android, jar, -test-android-enabled, -copy-android-libs" if="is.android.enabled"> |
||||||
|
<echo>Building debug android application version.</echo> |
||||||
|
<ant dir="mobile" target="debug" inheritall="false"/> |
||||||
|
<antcall target="-start-android-device"/> |
||||||
|
<ant dir="mobile" target="installd" inheritall="false"/> |
||||||
|
<antcall target="-run-android-device"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="clean-android"> |
||||||
|
<ant dir="mobile" target="clean" inheritall="false"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-mobile-deployment" depends="-test-android-enabled, -copy-android-libs" if="is.android.enabled" unless="no.android.build"> |
||||||
|
<ant dir="mobile" target="release" inheritall="false"/> |
||||||
|
<copy todir="dist" verbose="false" flatten="true"> |
||||||
|
<fileset dir="mobile/bin/"> |
||||||
|
<include name="**/*.apk"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-copy-android-libs" if="is.android.enabled"> |
||||||
|
<echo>Copying application libraries to android project.</echo> |
||||||
|
<delete dir="mobile/libs" failonerror="false"/> |
||||||
|
<mkdir dir="mobile/libs"/> |
||||||
|
<copy todir="mobile/libs" verbose="false" flatten="true"> |
||||||
|
<fileset dir="dist/lib/"> |
||||||
|
<exclude name="${assets.jar.name}"/> |
||||||
|
<exclude name="jME3-desktop.jar"/> |
||||||
|
<exclude name="jME3-blender.jar"/> |
||||||
|
<exclude name="jME3-lwjgl.jar"/> |
||||||
|
<exclude name="jME3-lwjgl-natives.jar"/> |
||||||
|
<exclude name="jME3-bullet-natives.jar"/> |
||||||
|
<exclude name="jME3-jbullet.jar"/> |
||||||
|
<exclude name="jME3-bullet.jar"/> |
||||||
|
<exclude name="jbullet.jar"/> |
||||||
|
<exclude name="stack-alloc.jar"/> |
||||||
|
<exclude name="vecmath.jar"/> |
||||||
|
<exclude name="lwjgl.jar"/> |
||||||
|
<exclude name="jinput.jar"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
|
||||||
|
<antcall target="-add-android-lib"/> |
||||||
|
<antcall target="-unzip-bullet-libs"/> |
||||||
|
<antcall target="-unzip-assets"/> |
||||||
|
<copy file="${dist.jar}" todir="mobile/libs/" verbose="false"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-add-android-lib"> |
||||||
|
<echo>Adding libraries for android.</echo> |
||||||
|
<copy todir="mobile/libs" flatten="true"> |
||||||
|
<path> |
||||||
|
<pathelement path="${libs.android-base.classpath}"/> |
||||||
|
</path> |
||||||
|
</copy> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-unzip-bullet-libs" depends="-delete-bullet-libs" if="bulletIsIncluded"> |
||||||
|
<echo>Replacing bullet library with android native version.</echo> |
||||||
|
<unzip src="mobile/libs/jME3-bullet-natives-android.jar" dest="mobile/libs"/> |
||||||
|
<delete file="mobile/libs/jME3-bullet-natives-android.jar"/> |
||||||
|
<delete dir="mobile/libs/x86"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-delete-bullet-libs" depends="-test-bullet-included" unless="bulletIsIncluded"> |
||||||
|
<delete file="mobile/libs/jME3-bullet.jar"/> |
||||||
|
<delete file="mobile/libs/jME3-bullet-natives-android.jar"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-unzip-assets"> |
||||||
|
<echo>Unzipping Assets to Android Directories</echo> |
||||||
|
<delete dir="mobile/assets" failonerror="false"/> |
||||||
|
<mkdir dir="mobile/assets"/> |
||||||
|
<unzip src="dist/lib/${assets.jar.name}" dest="mobile/assets"/> |
||||||
|
<delete file="mobile/libs/${assets.jar.name}" failonerror="true"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-test-bullet-included"> |
||||||
|
<condition property="bulletIsIncluded"> |
||||||
|
<contains string="${javac.classpath}" substring="bullet.jar"/> |
||||||
|
</condition> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-start-android-device"> |
||||||
|
<property file="mobile/local.properties"/> |
||||||
|
<exec executable="${sdk.dir}${android-adb-name}" failonerror="true"> |
||||||
|
<arg value="start-server"/> |
||||||
|
</exec> |
||||||
|
<echo>Waiting for device to be ready.. Connect your device now if its not connected yet.</echo> |
||||||
|
<exec executable="${sdk.dir}${android-adb-name}" failonerror="true"> |
||||||
|
<arg value="wait-for-device"/> |
||||||
|
</exec> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-run-android-device"> |
||||||
|
<property file="mobile/local.properties"/> |
||||||
|
<exec executable="${sdk.dir}${android-adb-name}" failonerror="true"> |
||||||
|
<arg value="logcat"/> |
||||||
|
<arg value="-c"/> |
||||||
|
</exec> |
||||||
|
<exec executable="${sdk.dir}${android-adb-name}" failonerror="true"> |
||||||
|
<arg value="shell"/> |
||||||
|
<arg value="am start -n ${mobile.android.package}/.MainActivity"/> |
||||||
|
</exec> |
||||||
|
<echo>Logging android device output, cancel build or disconnect device to stop logging.</echo> |
||||||
|
<exec executable="${sdk.dir}${android-adb-name}" failonerror="true"> |
||||||
|
<arg value="logcat"/> |
||||||
|
<arg value="AndroidRuntime:E"/> |
||||||
|
<arg value="System.out:I"/> |
||||||
|
<arg value="System.err:W"/> |
||||||
|
<arg value="NSLog:*"/> |
||||||
|
</exec> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-test-android-enabled"> |
||||||
|
<condition property="is.android.enabled"> |
||||||
|
<istrue value="${mobile.android.enabled}"/> |
||||||
|
</condition> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="-flag-no-android"> |
||||||
|
<property name="no.android.build" value="true"/> |
||||||
|
</target> |
||||||
|
</project> |
@ -0,0 +1,99 @@ |
|||||||
|
annotation.processing.enabled=true |
||||||
|
annotation.processing.enabled.in.editor=false |
||||||
|
annotation.processing.processors.list= |
||||||
|
annotation.processing.run.all.processors=true |
||||||
|
ant.customtasks.libs=android-base |
||||||
|
application.homepage=http://jmonkeyenging.org |
||||||
|
application.title=jMonkeyEngine Test Applications |
||||||
|
application.vendor=jMonkeyEngine |
||||||
|
assets.jar.name=assets.jar |
||||||
|
assets.excludes=**/*.j3odata,**/*.mesh.xml,**/*.skeleton.xml,**/*.scene,**/*.material,**/*.obj,**/*.mtl,**/*.blend |
||||||
|
assets.folder.name=assets |
||||||
|
assets.compress=true |
||||||
|
build.classes.dir=${build.dir}/classes |
||||||
|
build.classes.excludes=**/*.java,**/*.form |
||||||
|
# This directory is removed when the project is cleaned: |
||||||
|
build.dir=build |
||||||
|
build.generated.dir=${build.dir}/generated |
||||||
|
build.generated.sources.dir=${build.dir}/generated-sources |
||||||
|
# Only compile against the classpath explicitly listed here: |
||||||
|
build.sysclasspath=ignore |
||||||
|
build.test.classes.dir=${build.dir}/test/classes |
||||||
|
build.test.results.dir=${build.dir}/test/results |
||||||
|
compile.on.save=false |
||||||
|
# Uncomment to specify the preferred debugger connection transport: |
||||||
|
#debug.transport=dt_socket |
||||||
|
debug.classpath=\ |
||||||
|
${run.classpath} |
||||||
|
debug.test.classpath=\ |
||||||
|
${run.test.classpath} |
||||||
|
# This directory is removed when the project is cleaned: |
||||||
|
dist.dir=dist |
||||||
|
dist.jar=${dist.dir}/${application.title}.jar |
||||||
|
dist.javadoc.dir=${dist.dir}/javadoc |
||||||
|
endorsed.classpath= |
||||||
|
excludes= |
||||||
|
includes=** |
||||||
|
jar.archive.disabled=${jnlp.enabled} |
||||||
|
jar.compress=false |
||||||
|
jar.index=${jnlp.enabled} |
||||||
|
javac.classpath=\ |
||||||
|
${libs.jme3.classpath}:\ |
||||||
|
${libs.jme3-libraries.classpath}:\ |
||||||
|
${libs.jme3-libraries-blender.classpath}:\ |
||||||
|
${libs.jme3-test-data.classpath} |
||||||
|
# Space-separated list of extra javac options |
||||||
|
javac.compilerargs= |
||||||
|
javac.deprecation=false |
||||||
|
javac.processorpath=\ |
||||||
|
${javac.classpath} |
||||||
|
javac.source=1.5 |
||||||
|
javac.target=1.5 |
||||||
|
javac.test.classpath=\ |
||||||
|
${javac.classpath}:\ |
||||||
|
${build.classes.dir} |
||||||
|
javadoc.additionalparam= |
||||||
|
javadoc.author=false |
||||||
|
javadoc.encoding=${source.encoding} |
||||||
|
javadoc.noindex=false |
||||||
|
javadoc.nonavbar=false |
||||||
|
javadoc.notree=false |
||||||
|
javadoc.private=false |
||||||
|
javadoc.splitindex=true |
||||||
|
javadoc.use=true |
||||||
|
javadoc.version=false |
||||||
|
javadoc.windowtitle= |
||||||
|
jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api" |
||||||
|
jnlp.applet.class=jme3test.awt.AppHarness |
||||||
|
jnlp.applet.height=300 |
||||||
|
jnlp.applet.width=300 |
||||||
|
jnlp.codebase.type=local |
||||||
|
jnlp.descriptor=application |
||||||
|
jnlp.enabled=false |
||||||
|
jnlp.mixed.code=default |
||||||
|
jnlp.offline-allowed=false |
||||||
|
jnlp.signed=false |
||||||
|
jnlp.signing= |
||||||
|
jnlp.signing.alias= |
||||||
|
jnlp.signing.keystore= |
||||||
|
main.class=jme3test.TestChooser |
||||||
|
meta.inf.dir=${src.dir}/META-INF |
||||||
|
manifest.file=MANIFEST.MF |
||||||
|
mkdist.disabled=false |
||||||
|
mobile.android.enabled=true |
||||||
|
mobile.android.package=com.jmonkeyengine.tests |
||||||
|
mobile.android.target=android-8 |
||||||
|
platform.active=default_platform |
||||||
|
run.classpath=\ |
||||||
|
${javac.classpath}:\ |
||||||
|
${build.classes.dir}:\ |
||||||
|
${assets.folder.name} |
||||||
|
# Space-separated list of JVM arguments used when running the project |
||||||
|
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value |
||||||
|
# or test-sys-prop.name=value to set system properties for unit tests): |
||||||
|
run.jvmargs= |
||||||
|
run.test.classpath=\ |
||||||
|
${javac.test.classpath}:\ |
||||||
|
${build.test.classes.dir} |
||||||
|
source.encoding=UTF-8 |
||||||
|
src.dir=src |
@ -0,0 +1,21 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://www.netbeans.org/ns/project/1"> |
||||||
|
<type>org.netbeans.modules.java.j2seproject</type> |
||||||
|
<configuration> |
||||||
|
<buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1"> |
||||||
|
<extension file="assets-impl.xml" id="assets"> |
||||||
|
<dependency dependsOn="-init-assets" target="-do-init"/> |
||||||
|
</extension> |
||||||
|
<extension file="mobile-impl.xml" id="mobile"> |
||||||
|
<dependency dependsOn="-mobile-deployment" target="jar"/> |
||||||
|
</extension> |
||||||
|
</buildExtensions> |
||||||
|
<data xmlns="http://www.netbeans.org/ns/j2se-project/3"> |
||||||
|
<name>jME3TestsTemplateAndroid</name> |
||||||
|
<source-roots> |
||||||
|
<root id="src.dir"/> |
||||||
|
</source-roots> |
||||||
|
<test-roots/> |
||||||
|
</data> |
||||||
|
</configuration> |
||||||
|
</project> |
Loading…
Reference in new issue