ewol/Java/PROJECT_NAME.java

232 lines
6.8 KiB
Java

package com.__PROJECT_VENDOR__.__PROJECT_PACKAGE__;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.KeyEvent;
// For No Title :
import android.view.Window;
// For the full screen :
import android.view.WindowManager;
import java.io.File;
import android.content.Context;
import android.content.res.Configuration;
// For the getting apk name :
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
/**
* @brief Class :
*
*/
public class __PROJECT_NAME__ extends Activity {
private static native void ActivityOnCreate();
private static native void ActivityOnStart();
private static native void ActivityOnReStart();
private static native void ActivityOnResume();
private static native void ActivityOnPause();
private static native void ActivityOnStop();
private static native void ActivityOnDestroy();
private static native void ActivityParamSetArchiveDir(int mode, String myString);
private GLSurfaceView mGLView;
static {
System.loadLibrary("__PROJECT_PACKAGE__");
}
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the application directory
ActivityParamSetArchiveDir(1, getFilesDir().toString());
ActivityParamSetArchiveDir(2, getCacheDir().toString());
// to enable extarnal storage: add in the manifest the restriction needed ...
//ActivityParamSetArchiveDir(3, getExternalCacheDir().toString());
// return apk file path (or null on error)
String apkFilePath = null;
ApplicationInfo appInfo = null;
PackageManager packMgmr = getPackageManager();
try {
appInfo = packMgmr.getApplicationInfo("com.__PROJECT_VENDOR__.__PROJECT_PACKAGE__", 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("Unable to locate assets, aborting...");
}
apkFilePath = appInfo.sourceDir;
ActivityParamSetArchiveDir(0, apkFilePath);
// call C init ...
ActivityOnCreate();
// Remove the title of the current display :
requestWindowFeature(Window.FEATURE_NO_TITLE);
// set full screen Mode :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//Force landscape
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// create bsurface system
mGLView = new EwolGLSurfaceView(this);
setContentView(mGLView);
}
@Override protected void onStart() {
super.onStart();
// call C
ActivityOnStart();
}
@Override protected void onRestart() {
super.onRestart();
// call C
ActivityOnReStart();
}
@Override protected void onResume() {
super.onResume();
mGLView.onResume();
// call C
ActivityOnResume();
}
@Override protected void onPause() {
super.onPause();
mGLView.onPause();
// call C
ActivityOnPause();
}
@Override protected void onStop() {
super.onStop();
// call C
ActivityOnStop();
}
@Override protected void onDestroy() {
super.onDestroy();
// call C
ActivityOnDestroy();
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}
/**
* @brief Class :
*
*/
class EwolGLSurfaceView extends GLSurfaceView {
private static native void nativeApplicationInit();
private static native void nativeApplicationUnInit();
private static native void nativeEventInputMotion(int pointerID, float x, float y);
private static native void nativeEventInputState(int pointerID, boolean isDown, float x, float y);
private static native void nativeEventUnknow(int eventID);
public EwolGLSurfaceView(Context context) {
// super must be first statement in constructor
super(context);
// je n'ai pas compris ...
mRenderer = new EwolRenderer();
setRenderer(mRenderer);
nativeApplicationInit();
}
private boolean InputDown1 = false;
private boolean InputDown2 = false;
private boolean InputDown3 = false;
public boolean onTouchEvent(final MotionEvent event) {
// Wrapper on input events :
int tmpActionType = event.getAction();
if (tmpActionType == MotionEvent.ACTION_MOVE) {
final int pointerCount = event.getPointerCount();
for (int p = 0; p < pointerCount; p++) {
nativeEventInputMotion(event.getPointerId(p), (float)event.getX(p), (float)event.getY(p));
}
} else if( tmpActionType == MotionEvent.ACTION_POINTER_1_DOWN
|| tmpActionType == MotionEvent.ACTION_DOWN) {
nativeEventInputState(event.getPointerId(0), true, (float)event.getX(0), (float)event.getY(0));
InputDown1 = true;
} else if(tmpActionType == MotionEvent.ACTION_POINTER_1_UP) {
nativeEventInputState(event.getPointerId(0), false, (float)event.getX(0), (float)event.getY(0));
InputDown1 = false;
} else if (tmpActionType == MotionEvent.ACTION_POINTER_2_DOWN) {
nativeEventInputState(event.getPointerId(1), true, (float)event.getX(1), (float)event.getY(1));
InputDown2 = true;
} else if (tmpActionType == MotionEvent.ACTION_POINTER_2_UP) {
nativeEventInputState(event.getPointerId(1), false, (float)event.getX(1), (float)event.getY(1));
InputDown2 = false;
} else if (tmpActionType == MotionEvent.ACTION_POINTER_3_DOWN) {
nativeEventInputState(event.getPointerId(2), true, (float)event.getX(2), (float)event.getY(2));
InputDown3 = true;
} else if (tmpActionType == MotionEvent.ACTION_POINTER_3_UP) {
nativeEventInputState(event.getPointerId(2), false, (float)event.getX(2), (float)event.getY(2));
InputDown3 = false;
} else if(tmpActionType == MotionEvent.ACTION_UP){
if (InputDown1) {
nativeEventInputState(event.getPointerId(0), false, (float)event.getX(0), (float)event.getY(0));
InputDown1 = false;
} else if (InputDown2) {
nativeEventInputState(event.getPointerId(0), false, (float)event.getX(0), (float)event.getY(0));
InputDown2 = false;
} else {
nativeEventInputState(event.getPointerId(0), false, (float)event.getX(0), (float)event.getY(0));
InputDown3 = false;
}
}
return true;
}
public boolean onKeyDown (int keyCode, KeyEvent event){
// TODO ...
return true;
}
EwolRenderer mRenderer;
}
/**
* @brief Class :
*
*/
class EwolRenderer implements GLSurfaceView.Renderer {
private static native void nativeInit();
private static native void nativeResize(int w, int h);
private static native void nativeRender();
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
nativeInit();
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
nativeResize(w, h);
}
public void onDrawFrame(GL10 gl) {
nativeRender();
}
}