|
@@ -37,6 +37,7 @@ public class SDLActivity extends Activity {
|
|
|
// Keep track of the paused state
|
|
|
public static boolean mIsPaused, mIsSurfaceReady, mHasFocus;
|
|
|
public static boolean mExitCalledFromJava;
|
|
|
+ public static boolean mBrokenLibraries;
|
|
|
|
|
|
// Main components
|
|
|
protected static SDLActivity mSingleton;
|
|
@@ -52,13 +53,19 @@ public class SDLActivity extends Activity {
|
|
|
protected static AudioTrack mAudioTrack;
|
|
|
|
|
|
// Load the .so
|
|
|
- static {
|
|
|
- System.loadLibrary("SDL2");
|
|
|
- //System.loadLibrary("SDL2_image");
|
|
|
- //System.loadLibrary("SDL2_mixer");
|
|
|
- //System.loadLibrary("SDL2_net");
|
|
|
- //System.loadLibrary("SDL2_ttf");
|
|
|
- System.loadLibrary("main");
|
|
|
+ public void loadLibraries() {
|
|
|
+ String AppLibraries[] = {
|
|
|
+ "SDL2",
|
|
|
+ // "SDL2_image",
|
|
|
+ // "SDL2_mixer",
|
|
|
+ // "SDL2_net",
|
|
|
+ // "SDL2_ttf",
|
|
|
+ "main"
|
|
|
+ };
|
|
|
+
|
|
|
+ for (String lib : AppLibraries) {
|
|
|
+ System.loadLibrary(lib);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -83,6 +90,7 @@ public class SDLActivity extends Activity {
|
|
|
mSDLThread = null;
|
|
|
mAudioTrack = null;
|
|
|
mExitCalledFromJava = false;
|
|
|
+ mBrokenLibraries = false;
|
|
|
mIsPaused = false;
|
|
|
mIsSurfaceReady = false;
|
|
|
mHasFocus = true;
|
|
@@ -98,6 +106,35 @@ public class SDLActivity extends Activity {
|
|
|
// So we can call stuff from static callbacks
|
|
|
mSingleton = this;
|
|
|
|
|
|
+ // Load shared libraries
|
|
|
+ try {
|
|
|
+ loadLibraries();
|
|
|
+ } catch(UnsatisfiedLinkError e) {
|
|
|
+ System.out.println(e.getMessage());
|
|
|
+ mBrokenLibraries = true;
|
|
|
+ } catch(Exception e) {
|
|
|
+ System.out.println(e.getMessage());
|
|
|
+ mBrokenLibraries = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mBrokenLibraries)
|
|
|
+ {
|
|
|
+ AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
|
|
|
+ dlgAlert.setMessage("An error occurred while try to start the application. Please try again and/or reinstall.");
|
|
|
+ dlgAlert.setTitle("SDL Error");
|
|
|
+ dlgAlert.setPositiveButton("EXIT",
|
|
|
+ new DialogInterface.OnClickListener() {
|
|
|
+ public void onClick(DialogInterface dialog,int id) {
|
|
|
+ // if this button is clicked, close current activity
|
|
|
+ SDLActivity.mSingleton.finish();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ dlgAlert.setCancelable(true);
|
|
|
+ dlgAlert.create().show();
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// Set up the surface
|
|
|
mSurface = new SDLSurface(getApplication());
|
|
|
|
|
@@ -119,6 +156,11 @@ public class SDLActivity extends Activity {
|
|
|
protected void onPause() {
|
|
|
Log.v("SDL", "onPause()");
|
|
|
super.onPause();
|
|
|
+
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
SDLActivity.handlePause();
|
|
|
}
|
|
|
|
|
@@ -126,6 +168,11 @@ public class SDLActivity extends Activity {
|
|
|
protected void onResume() {
|
|
|
Log.v("SDL", "onResume()");
|
|
|
super.onResume();
|
|
|
+
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
SDLActivity.handleResume();
|
|
|
}
|
|
|
|
|
@@ -135,6 +182,10 @@ public class SDLActivity extends Activity {
|
|
|
super.onWindowFocusChanged(hasFocus);
|
|
|
Log.v("SDL", "onWindowFocusChanged(): " + hasFocus);
|
|
|
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
SDLActivity.mHasFocus = hasFocus;
|
|
|
if (hasFocus) {
|
|
|
SDLActivity.handleResume();
|
|
@@ -145,12 +196,25 @@ public class SDLActivity extends Activity {
|
|
|
public void onLowMemory() {
|
|
|
Log.v("SDL", "onLowMemory()");
|
|
|
super.onLowMemory();
|
|
|
+
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
SDLActivity.nativeLowMemory();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onDestroy() {
|
|
|
Log.v("SDL", "onDestroy()");
|
|
|
+
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ super.onDestroy();
|
|
|
+ // Reset everything in case the user re opens the app
|
|
|
+ SDLActivity.initialize();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// Send a quit message to the application
|
|
|
SDLActivity.mExitCalledFromJava = true;
|
|
|
SDLActivity.nativeQuit();
|
|
@@ -174,6 +238,11 @@ public class SDLActivity extends Activity {
|
|
|
|
|
|
@Override
|
|
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
|
|
+
|
|
|
+ if (SDLActivity.mBrokenLibraries) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
int keyCode = event.getKeyCode();
|
|
|
// Ignore certain special keys so they're handled by Android
|
|
|
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
|