Skip to content

Commit

Permalink
[Android] #2759: Show a message on failure to load a .so library (by …
Browse files Browse the repository at this point in the history
…Sylvain)
  • Loading branch information
gabomdq committed Oct 21, 2014
1 parent 96fd9ce commit 34a85f4
Showing 1 changed file with 76 additions and 7 deletions.
83 changes: 76 additions & 7 deletions android-project/src/org/libsdl/app/SDLActivity.java
Expand Up @@ -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;
Expand All @@ -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);
}
}

/**
Expand All @@ -83,6 +90,7 @@ public static void initialize() {
mSDLThread = null;
mAudioTrack = null;
mExitCalledFromJava = false;
mBrokenLibraries = false;
mIsPaused = false;
mIsSurfaceReady = false;
mHasFocus = true;
Expand All @@ -98,6 +106,35 @@ protected void onCreate(Bundle savedInstanceState) {
// 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());

Expand All @@ -119,13 +156,23 @@ protected void onCreate(Bundle savedInstanceState) {
protected void onPause() {
Log.v("SDL", "onPause()");
super.onPause();

if (SDLActivity.mBrokenLibraries) {
return;
}

SDLActivity.handlePause();
}

@Override
protected void onResume() {
Log.v("SDL", "onResume()");
super.onResume();

if (SDLActivity.mBrokenLibraries) {
return;
}

SDLActivity.handleResume();
}

Expand All @@ -135,6 +182,10 @@ public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.v("SDL", "onWindowFocusChanged(): " + hasFocus);

if (SDLActivity.mBrokenLibraries) {
return;
}

SDLActivity.mHasFocus = hasFocus;
if (hasFocus) {
SDLActivity.handleResume();
Expand All @@ -145,12 +196,25 @@ public void onWindowFocusChanged(boolean hasFocus) {
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();
Expand All @@ -174,6 +238,11 @@ protected void onDestroy() {

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

0 comments on commit 34a85f4

Please sign in to comment.