[Android] #2759: Show a message on failure to load a .so library (by Sylvain)

This commit is contained in:
Gabriel Jacobo 2014-10-21 11:44:35 -03:00
parent 96fd9cefc8
commit 34a85f4de6
1 changed files with 76 additions and 7 deletions

View File

@ -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 ||