Skip to content
Permalink
Browse files

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

…Sylvain)
  • Loading branch information
gabomdq committed Oct 21, 2014
1 parent 96fd9ce commit 34a85f4de66a96fb198c6fce9964ee994a6c25ca
Showing with 76 additions and 7 deletions.
  1. +76 −7 android-project/src/org/libsdl/app/SDLActivity.java
@@ -37,6 +37,7 @@
// 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 @@
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 static void initialize() {
mSDLThread = null;
mAudioTrack = null;
mExitCalledFromJava = false;
mBrokenLibraries = false;
mIsPaused = false;
mIsSurfaceReady = false;
mHasFocus = true;
@@ -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());

@@ -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();
}

@@ -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();
@@ -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();
@@ -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 ||

0 comments on commit 34a85f4

Please sign in to comment.