From c684eb2cde827f5f8b3f385baa79911abdd08796 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 28 Aug 2017 23:04:47 -0700 Subject: [PATCH] Add a way to set the context when other activities are active so many SDL API functions still work. --- .../src/org/libsdl/app/SDLActivity.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index 5d7e81df85dd9..fdddad31e3f50 100644 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -56,6 +56,7 @@ public enum NativeState { 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 @@ protected String[] getArguments() { 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 static void initialize() { } // 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 @@ protected void onCreate(Bundle savedInstanceState) { 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 static boolean setActivityTitle(String title) { */ 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 static boolean isScreenKeyboardShown() * 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 static boolean sendMessage(int command, int param) { * 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 static boolean isTextInputEvent(KeyEvent event) { * This method is called by SDL using JNI. */ public static Surface getNativeSurface() { + if (SDLActivity.mSurface == null) { + return null; + } return SDLActivity.mSurface.getNativeSurface(); }