diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index b28f3165ea..f31e07181c 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionCode="1" android:versionName="1.0" > - + diff --git a/android/src/com/turboviking/libnative/NativeActivity.java b/android/src/com/turboviking/libnative/NativeActivity.java index 2f37883e73..33e5affebc 100644 --- a/android/src/com/turboviking/libnative/NativeActivity.java +++ b/android/src/com/turboviking/libnative/NativeActivity.java @@ -71,7 +71,7 @@ class Installation { } } - + public class NativeActivity extends Activity { // Remember to loadLibrary your JNI .so in a static {} block @@ -86,7 +86,6 @@ public class NativeActivity extends Activity { public static String runCommand; public static String commandParameter; - public static String installID; String getApplicationLibraryDir(ApplicationInfo application) { @@ -184,10 +183,9 @@ public class NativeActivity extends Activity { // Toast.makeText(this, "Value: " + input.getText().toString(), Toast.LENGTH_LONG).show(); } - @SuppressLint("NewApi") public void lightsOut() { if (Build.VERSION.SDK_INT >= 11) { - mGLSurfaceView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); + // mGLSurfaceView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); } } @@ -223,7 +221,7 @@ public class NativeActivity extends Activity { @Override protected void onStop() { super.onStop(); - Log.i(TAG, "onStop"); + Log.i(TAG, "onStop - do nothing"); } @Override @@ -241,8 +239,6 @@ public class NativeActivity extends Activity { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (!overrideKeys()) - return false; // Eat these keys, to avoid accidental exits / other screwups. // Maybe there's even more we need to eat on tablets? if (keyCode == KeyEvent.KEYCODE_BACK) { diff --git a/android/src/com/turboviking/libnative/NativeGLView.java b/android/src/com/turboviking/libnative/NativeGLView.java index 2709191f9d..2aec39856a 100644 --- a/android/src/com/turboviking/libnative/NativeGLView.java +++ b/android/src/com/turboviking/libnative/NativeGLView.java @@ -3,12 +3,16 @@ package com.turboviking.libnative; // Touch- and sensor-enabled GLSurfaceView. // Supports simple multitouch and pressure. +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.opengl.GLSurfaceView; +import android.os.Build; import android.util.Log; import android.view.MotionEvent; @@ -17,9 +21,29 @@ public class NativeGLView extends GLSurfaceView implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAccelerometer; + + public NativeGLView(NativeActivity activity) { super(activity); setEGLContextClientVersion(2); + + if (Build.VERSION.SDK_INT >= 11) { + try { + Method method_setPreserveEGLContextOnPause = GLSurfaceView.class.getMethod( + "setPreserveEGLContextOnPause", new Class[] { Boolean.class }); + Log.i(TAG, "Invoking setPreserveEGLContextOnPause"); + method_setPreserveEGLContextOnPause.invoke(this, true); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + // setEGLConfigChooser(5, 5, 5, 0, 16, 0); // setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS); mSensorManager = (SensorManager)activity.getSystemService(Activity.SENSOR_SERVICE); diff --git a/android/src/com/turboviking/libnative/NativeRenderer.java b/android/src/com/turboviking/libnative/NativeRenderer.java index e4f741f474..232204c183 100644 --- a/android/src/com/turboviking/libnative/NativeRenderer.java +++ b/android/src/com/turboviking/libnative/NativeRenderer.java @@ -8,24 +8,26 @@ import android.util.Log; public class NativeRenderer implements GLSurfaceView.Renderer { - private static String TAG = "RollerballRenderer"; + private static String TAG = "NativeRenderer"; NativeActivity mActivity; NativeRenderer(NativeActivity act) { mActivity = act; } - @Override - public void onSurfaceCreated(GL10 unused, EGLConfig config) { - Log.i(TAG, "onSurfaceCreated"); - displayInit(); - } @Override public void onDrawFrame(GL10 unused /*use GLES20*/) { displayRender(); } - + + @Override + public void onSurfaceCreated(GL10 unused, EGLConfig config) { + Log.i(TAG, "onSurfaceCreated - EGL context is new or was lost"); + // Actually, it seems that it is here we should recreate lost GL objects. + displayInit(); + } + @Override public void onSurfaceChanged(GL10 unused, int width, int height) { Log.i(TAG, "onSurfaceChanged"); @@ -35,9 +37,10 @@ public class NativeRenderer implements GLSurfaceView.Renderer { // NATIVE METHODS - public native void displayInit(); // Note: This also means "device lost" and you should reload // all buffered objects. + public native void displayInit(); + public native void displayResize(int w, int h); public native void displayRender();