Android: be sure shared libraries are loaded in onConfigurationChanged() This could fix a rare crash if: - onConfigurationChanged is called before onCreate(); or shared libraries failed to load and onConfigurationChanged() is called
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
index aa1df34..b5c3193 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -71,7 +71,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
public static NativeState mCurrentNativeState;
/** If shared libraries (e.g. SDL or the native application) could not be loaded. */
- public static boolean mBrokenLibraries;
+ public static boolean mBrokenLibraries = true;
// Main components
protected static SDLActivity mSingleton;
@@ -174,7 +174,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
mCursors = new Hashtable<Integer, PointerIcon>();
mLastCursorID = 0;
mSDLThread = null;
- mBrokenLibraries = false;
mIsResumedCalled = false;
mHasFocus = true;
mNextNativeState = NativeState.INIT;
@@ -199,6 +198,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
String errorMsgBrokenLib = "";
try {
loadLibraries();
+ mBrokenLibraries = false; /* success */
} catch(UnsatisfiedLinkError e) {
System.err.println(e.getMessage());
mBrokenLibraries = true;
@@ -420,6 +420,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
Log.v(TAG, "onConfigurationChanged()");
super.onConfigurationChanged(newConfig);
+ if (SDLActivity.mBrokenLibraries) {
+ return;
+ }
+
if (mCurrentLocale == null || !mCurrentLocale.equals(newConfig.locale)) {
mCurrentLocale = newConfig.locale;
SDLActivity.onNativeLocaleChanged();