Commit c684eb2cde827f5f8b3f385baa79911abdd08796

Sam Lantinga 2017-08-28T23:04:47

Add a way to set the context when other activities are active so many SDL API functions still work.

diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java
index 5d7e81d..fdddad3 100644
--- a/android-project/src/org/libsdl/app/SDLActivity.java
+++ b/android-project/src/org/libsdl/app/SDLActivity.java
@@ -56,6 +56,7 @@ public class SDLActivity extends Activity {
     public static boolean mSeparateMouseAndTouch;
 
     // Main components
+    protected static Context mContext;
     protected static SDLActivity mSingleton;
     protected static SDLSurface mSurface;
     protected static View mTextEdit;
@@ -135,6 +136,7 @@ public class SDLActivity extends Activity {
     public static void initialize() {
         // The static nature of the singleton and Android quirkyness force us to initialize everything here
         // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values
+        mContext = null;
         mSingleton = null;
         mSurface = null;
         mTextEdit = null;
@@ -155,6 +157,9 @@ public class SDLActivity extends Activity {
     }
 
     // Setup
+    public static void setContext(Context context) {
+        mContext = context;
+    }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log.v(TAG, "Device: " + android.os.Build.DEVICE);
@@ -165,7 +170,7 @@ public class SDLActivity extends Activity {
         SDLActivity.initialize();
 
         // So we can call stuff from static callbacks
-        mSingleton = this;
+        mContext = mSingleton = this;
 
         // Load shared libraries
         String errorMsgBrokenLib = "";
@@ -564,8 +569,9 @@ public class SDLActivity extends Activity {
      */
     public static void setOrientation(int w, int h, boolean resizable, String hint)
     {
-      mSingleton.setOrientationBis(w, h, resizable, hint);
-      return;
+        if (mSingleton != null) {
+            mSingleton.setOrientationBis(w, h, resizable, hint);
+        }
     }
    
     /**
@@ -638,6 +644,9 @@ public class SDLActivity extends Activity {
      * This method is called by SDL using JNI.
      */
     public static boolean sendMessage(int command, int param) {
+        if (mSingleton == null) {
+            return false;
+        }
         return mSingleton.sendCommand(command, Integer.valueOf(param));
     }
 
@@ -645,7 +654,7 @@ public class SDLActivity extends Activity {
      * This method is called by SDL using JNI.
      */
     public static Context getContext() {
-        return mSingleton;
+        return mContext;
     }
 
     static class ShowTextInputTask implements Runnable {
@@ -716,6 +725,9 @@ public class SDLActivity extends Activity {
      * This method is called by SDL using JNI.
      */
     public static Surface getNativeSurface() {
+        if (SDLActivity.mSurface == null) {
+            return null;
+        }
         return SDLActivity.mSurface.getNativeSurface();
     }