Ver Fonte

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

Sam Lantinga há 7 anos atrás
pai
commit
c684eb2cde
1 ficheiros alterados com 16 adições e 4 exclusões
  1. 16 4
      android-project/src/org/libsdl/app/SDLActivity.java

+ 16 - 4
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();
     }