Improved Android patch to disable system bars

Hi,

some time ago somebody posted a patch to dim the system bars on Android. I
don’t remember anymore who it was, and I have lost the mail with the
original patch. I’m not sure either whether it went into bugzilla.
Nevertheless, I was using the patch successfully for a while.

Now that Android supports a “sticky immersive mode”, I have improved the
patch. If the original person recognizes it, please review. Of course, any
other feedback is welcome as well.

Please ignore the additional code in SDL_hints.h

Regards,

Daniel

— SDL_snapshot/android-project/AndroidManifest.xml??? 2016-10-02 09:27:
31.000000000 +0200
+++ SDL_patches/android-project/AndroidManifest.xml??? 2016-10-02 13:29:
01.203126644 +0200
@@ -9,12 +9,13 @@
??? android:installLocation=“auto”>
?
???
-???
+???
?
???
???
?
-???
+???
+???
???
?
???

— SDL_snapshot/android-project/src/org/libsdl/app/SDLActivity.java??? 2016
-10-02 09:27:31.000000000 +0200
+++ SDL_patches/android-project/src/org/libsdl/app/SDLActivity.java??? 2016-
10-02 14:51:36.873309659 +0200
@@ -17,6 +17,7 @@
?import android.view.inputmethod.EditorInfo;
?import android.view.inputmethod.InputConnection;
?import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsoluteLayout;
?import android.widget.RelativeLayout;
?import android.widget.Button;
?import android.widget.LinearLayout;
@@ -36,6 +37,8 @@
?public class SDLActivity extends Activity {
??? private static final String TAG = “SDL”;
?
+??? private static final String SDL_HINT_ANDROID_HIDE_SYSTEM_BARS = “SDL_
ANDROID_HIDE_SYSTEM_BARS”;+
??? // Keep track of the paused state
??? public static boolean mIsPaused, mIsSurfaceReady, mHasFocus;
??? public static boolean mExitCalledFromJava;
@@ -166,6 +169,13 @@
??? // Set up the surface
??? mSurface = new SDLSurface(getApplication());
?
+??? nativeAddHintCallback(SDL_HINT_ANDROID_HIDE_SYSTEM_BARS, new
SDLHintCallback() {
+??? ??? @Override
+??? ??? public void callback(String name, String oldValue, String
newValue) {
+??? ??? ??? updateSystemBarsStatus(newValue);
+??? ??? }
+??? });
+???
??? if(Build.VERSION.SDK_INT >= 12) {
??? mJoystickHandler = new SDLJoystickHandler_API12();
??? }
@@ -213,6 +223,8 @@
??? }
?
??? SDLActivity.handleResume();
+???
+??? updateSystemBarsStatus(nativeGetHint(SDL_HINT_ANDROID_HIDE_SYSTEM_
BARS));
??? }
?
?
@@ -325,6 +337,30 @@
??? mSingleton.finish();
??? }
?
+??? void updateSystemBarsStatus(String value) {
+??? ??? if (“1”.equals(value)) {
+??? ??? ??? runOnUiThread(new Runnable() {
+??? ??? ??? ??? @Override
+??? ??? ??? ??? public void run() {
+??? ??? ??? ??? ??? // first try immersive mode (sticky immersive)
+??? ??? ??? ??? ??? if (Build.VERSION.SDK_INT >= 19) {
+??? ??? ??? ??? ??? ??? getWindow().getDecorView().setSystemUiVisibility(
+??? ??? ??? ??? ??? ??? ??? ??? View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_
NAVIGATION
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_FULLSCREEN
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+??? ??? ??? ??? ??? } else {
+??? ??? ??? ??? ??? ??? // if not available, use at least low profile mode
+??? ??? ??? ??? ??? ??? if (Build.VERSION.SDK_INT >= 14) {
+??? ??? ??? ??? ??? ??? ??? getWindow().getDecorView().
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
+??? ??? ??? ??? ??? ??? }
+??? ??? ??? ??? ??? }
+??? ??? ??? ??? }
+??? ??? ??? });
+??? ??? }
+??? }
?
??? // Messages from the SDLMain thread
??? static final int COMMAND_CHANGE_TITLE = 1;
@@ -437,6 +473,10 @@
??? int is_accelerometer, int
nbuttons,
??? int naxes, int nhats, int
nballs);
??? public static native int nativeRemoveJoystick(int device_id);
+??? interface SDLHintCallback {
+??? ??? void callback(String name, String oldValue, String newValue);
+??? }
+??? public static native void nativeAddHintCallback(String name,
SDLHintCallback callback);
??? public static native String nativeGetHint(String name);
?
??? /**

— SDL_snapshot/include/SDL_hints.h??? 2016-10-02 09:27:31.000000000 +0200
+++ SDL_patches/include/SDL_hints.h??? 2016-10-02 11:38:21.092649566 +0200
@@ -689,6 +689,30 @@
?#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT “SDL_BMP_SAVE_LEGACY_FORMAT”
?
?/**

    • \brief A hint to control whether the system shall remember the preferred
      fullscreen mode.
    • This hint will work for WinRT only.
    • The variable can be set to the following values:
  • *??? “0”??? - No action. System does not remember whether the app wants
    to run in fullscreen.
  • *??? “1”??? - Remember preferred app setting (fullscreen or windowed).
    • The default is “0”.
  • */
    +#define SDL_HINT_WINRT_REMEMBER_WINDOW_FULLSCREEN_PREFERENCE “SDL_WINRT_
    REMEMBER_WINDOW_FULLSCREEN_PREFERENCE”

+/**

    • \brief A hint to control whether an Android app shall try to dim resp.
      remove the system bars.
    • This hint, when set to 1, will try to set “low profile mode” or “sticky
      immersive mode”,
    • depending on which Android API was found. If the API version is too low
      for either,
    • nothing will happen.
  • */
    +#define SDL_HINT_ANDROID_HIDE_SYSTEM_BARS “SDL_ANDROID_HIDE_SYSTEM_BARS”

+/**
? *? \brief? An enumeration of hint priorities
? */
?typedef enum

— SDL_snapshot/src/core/android/SDL_android.c??? 2016-10-02 09:27:
31.000000000 +0200
+++ SDL_patches/src/core/android/SDL_android.c??? 2016-10-02 11:49:
15.985195517 +0200
@@ -421,6 +421,32 @@
??? return result;
?}
?
+void Android_JNI_HintCallback(void userdata, const char name, const char
oldValue, const char newValue) {
+??? JNIEnv env = Android_JNI_GetEnv();
+
+??? jobject callback = (jobject)userdata;
+?? jclass cls = (env)->GetObjectClass(env, callback);
+??? jmethodID method = (env)->GetMethodID(env, cls, “callback”, “(Ljava/
lang/String;Ljava/lang/String;Ljava/lang/String;)V”);
+
+??? jstring javaName??? = (env)->NewStringUTF(env, name);
+??? jstring javaOldValue = (env)->NewStringUTF(env, oldValue);
+??? jstring javaNewValue = (env)->NewStringUTF(env, newValue);
+
+??? (env)->CallVoidMethod(env, callback, method, javaName, javaOldValue,
javaNewValue);
+
+??? (env)->DeleteLocalRef(env, javaName);
+??? (env)->DeleteLocalRef(env, javaOldValue);
+??? (env)->DeleteLocalRef(env, javaNewValue);
+}
+
+void Java_org_libsdl_app_SDLActivity_nativeAddHintCallback(JNIEnv
env,
jclass cls, jstring name, jobject callback) {
+??? const char utfname = (env)->GetStringUTFChars(env, name, NULL);
+
+??? SDL_AddHintCallback(utfname, Android_JNI_HintCallback, (env)->
NewGlobalRef(env, callback));
+
+??? (env)->ReleaseStringUTFChars(env, name, utfname);???
+}
+
?/
*********************************************************


??? Functions called by SDL into Java
?***************************************************************************
****/

Thanks! Can you please submit it to bugzilla so it doesn’t get lost?

http://bugzilla.libsdl.orgOn Sun, Oct 2, 2016 at 7:12 AM, hardcoredaniel wrote:

Hi,

some time ago somebody posted a patch to dim the system bars on Android. I
don’t remember anymore who it was, and I have lost the mail with the
original patch. I’m not sure either whether it went into bugzilla.
Nevertheless, I was using the patch successfully for a while.

Now that Android supports a “sticky immersive mode”, I have improved the
patch. If the original person recognizes it, please review. Of course, any
other feedback is welcome as well.

Please ignore the additional code in SDL_hints.h

Regards,

Daniel

— SDL_snapshot/android-project/AndroidManifest.xml 2016-10-02
09:27:31.000000000 +0200
+++ SDL_patches/android-project/AndroidManifest.xml 2016-10-02
13:29:01.203126644 +0200
@@ -9,12 +9,13 @@
android:installLocation=“auto”>

 <!-- Android 2.3.3 -->

— SDL_snapshot/android-project/src/org/libsdl/app/SDLActivity.java
2016-10-02 09:27:31.000000000 +0200
+++ SDL_patches/android-project/src/org/libsdl/app/SDLActivity.java
2016-10-02 14:51:36.873309659 +0200
@@ -17,6 +17,7 @@
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsoluteLayout;
import android.widget.RelativeLayout;
import android.widget.Button;
import android.widget.LinearLayout;
@@ -36,6 +37,8 @@
public class SDLActivity extends Activity {
private static final String TAG = “SDL”;

  • private static final String SDL_HINT_ANDROID_HIDE_SYSTEM_BARS =
    “SDL_ANDROID_HIDE_SYSTEM_BARS”;

  • // Keep track of the paused state
    public static boolean mIsPaused, mIsSurfaceReady, mHasFocus;
    public static boolean mExitCalledFromJava;
    @@ -166,6 +169,13 @@
    // Set up the surface
    mSurface = new SDLSurface(getApplication());

  •    nativeAddHintCallback(SDL_HINT_ANDROID_HIDE_SYSTEM_BARS, new
    

SDLHintCallback() {

  •        @Override
    
  •        public void callback(String name, String oldValue, String
    

newValue) {

  •            updateSystemBarsStatus(newValue);
    
  •        }
    
  •    });
    
  •    if(Build.VERSION.SDK_INT >= 12) {
           mJoystickHandler = new SDLJoystickHandler_API12();
       }
    

@@ -213,6 +223,8 @@
}

     SDLActivity.handleResume();
  •    updateSystemBarsStatus(nativeGetHint(SDL_HINT_
    

ANDROID_HIDE_SYSTEM_BARS));
}

@@ -325,6 +337,30 @@
mSingleton.finish();
}

  • void updateSystemBarsStatus(String value) {
  •    if ("1".equals(value)) {
    
  •        runOnUiThread(new Runnable() {
    
  •            @Override
    
  •            public void run() {
    
  •                // first try immersive mode (sticky immersive)
    
  •                if (Build.VERSION.SDK_INT >= 19) {
    
  •                    getWindow().getDecorView().setSystemUiVisibility(
    
  •                            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    
  •                            | View.SYSTEM_UI_FLAG_LAYOUT_
    

HIDE_NAVIGATION

  •                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    
  •                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    
  •                            | View.SYSTEM_UI_FLAG_FULLSCREEN
    
  •                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    
  •                } else {
    
  •                    // if not available, use at least low profile mode
    
  •                    if (Build.VERSION.SDK_INT >= 14) {
    
  •                        getWindow().getDecorView().
    

setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

  •                    }
    
  •                }
    
  •            }
    
  •        });
    
  •    }
    
  • }

    // Messages from the SDLMain thread
    static final int COMMAND_CHANGE_TITLE = 1;
    @@ -437,6 +473,10 @@
    int is_accelerometer, int
    nbuttons,
    int naxes, int nhats, int
    nballs);
    public static native int nativeRemoveJoystick(int device_id);

  • interface SDLHintCallback {

  •    void callback(String name, String oldValue, String newValue);
    
  • }

  • public static native void nativeAddHintCallback(String name,
    SDLHintCallback callback);
    public static native String nativeGetHint(String name);

    /**

— SDL_snapshot/include/SDL_hints.h 2016-10-02 09:27:31.000000000
+0200
+++ SDL_patches/include/SDL_hints.h 2016-10-02 11:38:21.092649566 +0200
@@ -689,6 +689,30 @@
#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT “SDL_BMP_SAVE_LEGACY_FORMAT”

/**

    • \brief A hint to control whether the system shall remember the
      preferred fullscreen mode.
    • This hint will work for WinRT only.
    • The variable can be set to the following values:
    • “0” - No action. System does not remember whether the app
      wants to run in fullscreen.
    • “1” - Remember preferred app setting (fullscreen or windowed).
    • The default is “0”.
  • */
    +#define SDL_HINT_WINRT_REMEMBER_WINDOW_FULLSCREEN_PREFERENCE
    "SDL_WINRT_REMEMBER_WINDOW_FULLSCREEN_PREFERENCE"

+/**

    • \brief A hint to control whether an Android app shall try to dim resp.
      remove the system bars.
    • This hint, when set to 1, will try to set “low profile mode” or
      "sticky immersive mode",
    • depending on which Android API was found. If the API version is too
      low for either,
    • nothing will happen.
  • */
    +#define SDL_HINT_ANDROID_HIDE_SYSTEM_BARS “SDL_ANDROID_HIDE_SYSTEM_BARS”

+/**

  • \brief An enumeration of hint priorities
    */
    typedef enum

— SDL_snapshot/src/core/android/SDL_android.c 2016-10-02
09:27:31.000000000 +0200
+++ SDL_patches/src/core/android/SDL_android.c 2016-10-02
11:49:15.985195517 +0200
@@ -421,6 +421,32 @@
return result;
}

+void Android_JNI_HintCallback(void *userdata, const char *name, const
char *oldValue, const char *newValue) {

  • JNIEnv *env = Android_JNI_GetEnv();
  • jobject callback = (jobject)userdata;
  • jclass cls = (*env)->GetObjectClass(env, callback);
  • jmethodID method = (*env)->GetMethodID(env, cls, “callback”,
    "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
  • jstring javaName = (*env)->NewStringUTF(env, name);
  • jstring javaOldValue = (*env)->NewStringUTF(env, oldValue);
  • jstring javaNewValue = (*env)->NewStringUTF(env, newValue);
  • (*env)->CallVoidMethod(env, callback, method, javaName, javaOldValue,
    javaNewValue);
  • (*env)->DeleteLocalRef(env, javaName);
  • (*env)->DeleteLocalRef(env, javaOldValue);
  • (*env)->DeleteLocalRef(env, javaNewValue);
    +}

+void Java_org_libsdl_app_SDLActivity_nativeAddHintCallback(JNIEnv* env,
jclass cls, jstring name, jobject callback) {

  • const char *utfname = (*env)->GetStringUTFChars(env, name, NULL);
  • SDL_AddHintCallback(utfname, Android_JNI_HintCallback,
    (*env)->NewGlobalRef(env, callback));
  • (*env)->ReleaseStringUTFChars(env, name, utfname);
    +}

/**********************************************************


          Functions called by SDL into Java

********************/


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Ok, it is in now:

https://bugzilla.libsdl.org/show_bug.cgi?id=3445

---------- P?vodn? zpr?va ----------
Od: Sam Lantinga
Komu: SDL Development List
Datum: 4. 10. 2016 20:35:50
P?edm?t: Re: [SDL] Improved Android patch to disable system bars

"

Thanks! Can you please submit it to bugzilla so it doesn’t get lost?

http://bugzilla.libsdl.org(http://bugzilla.libsdl.org)On Sun, Oct 2, 2016 at 7:12 AM, hardcoredaniel <@hardcoredaniel (mailto:@hardcoredaniel)> wrote:
"
Hi,

some time ago somebody posted a patch to dim the system bars on Android. I
don’t remember anymore who it was, and I have lost the mail with the
original patch. I’m not sure either whether it went into bugzilla.
Nevertheless, I was using the patch successfully for a while.

Now that Android supports a “sticky immersive mode”, I have improved the
patch. If the original person recognizes it, please review. Of course, any
other feedback is welcome as well.

Please ignore the additional code in SDL_hints.h

Regards,

Daniel

— SDL_snapshot/android-project/ AndroidManifest.xml??? 2016-10-02 09:27:
31.000000000 +0200
+++ SDL_patches/android-project/ AndroidManifest.xml??? 2016-10-02 13:29:
01.203126644 +0200
@@ -9,12 +9,13 @@
??? android:installLocation=“auto” >
?
???
-???
+???
?
???
???
?
-???
+???
+???
???
?
???

— SDL_snapshot/android-project/ src/org/libsdl/app/ SDLActivity.java???
2016-10-02 09:27:31.000000000 +0200
+++ SDL_patches/android-project/ src/org/libsdl/app/ SDLActivity.java???
2016-10-02 14:51:36.873309659 +0200
@@ -17,6 +17,7 @@
?import android.view.inputmethod. EditorInfo;
?import android.view.inputmethod. InputConnection;
?import android.view.inputmethod. InputMethodManager;
+import android.widget.AbsoluteLayout;
?import android.widget.RelativeLayout;
?import android.widget.Button;
?import android.widget.LinearLayout;
@@ -36,6 +37,8 @@
?public class SDLActivity extends Activity {
??? private static final String TAG = “SDL”;
?
+??? private static final String SDL_HINT_ANDROID_HIDE_SYSTEM_ BARS = “SDL_
ANDROID_HIDE_SYSTEM_BARS” ;
+
??? // Keep track of the paused state
??? public static boolean mIsPaused, mIsSurfaceReady, mHasFocus;
??? public static boolean mExitCalledFromJava;
@@ -166,6 +169,13 @@
??? // Set up the surface
??? mSurface = new SDLSurface(getApplication());
?
+??? nativeAddHintCallback(SDL_ HINT_ANDROID_HIDE_SYSTEM_BARS, new
SDLHintCallback() {
+??? ??? @Override
+??? ??? public void callback(String name, String oldValue, String
newValue) {
+??? ??? ??? updateSystemBarsStatus( newValue);
+??? ??? }
+??? });
+???
??? if(Build.VERSION.SDK_INT >= 12) {
??? mJoystickHandler = new SDLJoystickHandler_API12();
??? }
@@ -213,6 +223,8 @@
??? }
?
??? SDLActivity.handleResume();
+???
+??? updateSystemBarsStatus( nativeGetHint(SDL_HINT_ ANDROID_HIDE_SYSTEM
BARS));
??? }
?
?
@@ -325,6 +337,30 @@
??? mSingleton.finish();
??? }
?
+??? void updateSystemBarsStatus(String value) {
+??? ??? if (“1”.equals(value)) {
+??? ??? ??? runOnUiThread(new Runnable() {
+??? ??? ??? ??? @Override
+??? ??? ??? ??? public void run() {
+??? ??? ??? ??? ??? // first try immersive mode (sticky immersive)
+??? ??? ??? ??? ??? if (Build.VERSION.SDK_INT >= 19) {
+??? ??? ??? ??? ??? ??? getWindow().getDecorView(). setSystemUiVisibility(
+??? ??? ??? ??? ??? ??? ??? ??? View.SYSTEM_UI_FLAG_LAYOUT
STABLE
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_LAYOUT_ HIDE_
NAVIGATION
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_LAYOUT_ FULLSCREEN
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_HIDE_ NAVIGATION
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_FULLSCREEN
+??? ??? ??? ??? ??? | View.SYSTEM_UI_FLAG_IMMERSIVE_ STICKY);
+??? ??? ??? ??? ??? } else {
+??? ??? ??? ??? ??? ??? // if not available, use at least low profile mode
+??? ??? ??? ??? ??? ??? if (Build.VERSION.SDK_INT >= 14) {
+??? ??? ??? ??? ??? ??? ??? getWindow().getDecorView().
setSystemUiVisibility(View. SYSTEM_UI_FLAG_LOW_PROFILE);
+??? ??? ??? ??? ??? ??? }
+??? ??? ??? ??? ??? }
+??? ??? ??? ??? }
+??? ??? ??? });
+??? ??? }
+??? }
?
??? // Messages from the SDLMain thread
??? static final int COMMAND_CHANGE_TITLE = 1;
@@ -437,6 +473,10 @@
??? ??? int is_accelerometer, int
nbuttons,
??? ??? int naxes, int nhats, int
nballs);
??? public static native int nativeRemoveJoystick(int device_id);
+??? interface SDLHintCallback {
+??? ??? void callback(String name, String oldValue, String newValue);
+??? }
+??? public static native void nativeAddHintCallback(String name,
SDLHintCallback callback);
??? public static native String nativeGetHint(String name);
?
??? /**

— SDL_snapshot/include/SDL_ hints.h??? 2016-10-02 09:27:31.000000000 +0200
+++ SDL_patches/include/SDL_hints. h??? 2016-10-02 11:38:21.092649566 +0200
@@ -689,6 +689,30 @@
?#define SDL_HINT_BMP_SAVE_LEGACY_ FORMAT “SDL_BMP_SAVE_LEGACY_FORMAT”
?
?/**

    • \brief A hint to control whether the system shall remember the preferred
      fullscreen mode.
    • This hint will work for WinRT only.
    • The variable can be set to the following values:
  • *??? “0”??? - No action. System does not remember whether the app wants
    to run in fullscreen.
  • *??? “1”??? - Remember preferred app setting (fullscreen or windowed).
    • The default is “0”.
  • */
    +#define SDL_HINT_WINRT_REMEMBER_ WINDOW_FULLSCREEN_PREFERENCE “SDL_WINRT_
    REMEMBER_WINDOW_ FULLSCREEN_PREFERENCE”

+/**

    • \brief A hint to control whether an Android app shall try to dim resp.
      remove the system bars.
    • This hint, when set to 1, will try to set “low profile mode” or “sticky
      immersive mode”,
    • depending on which Android API was found. If the API version is too low
      for either,
    • nothing will happen.
  • */
    +#define SDL_HINT_ANDROID_HIDE_SYSTEM_ BARS “SDL_ANDROID_HIDE_SYSTEM_BARS”

+/**
? *? \brief? An enumeration of hint priorities
? */
?typedef enum

— SDL_snapshot/src/core/android/ SDL_android.c??? 2016-10-02 09:27:
31.000000000 +0200
+++ SDL_patches/src/core/android/ SDL_android.c??? 2016-10-02 11:49:
15.985195517 +0200
@@ -421,6 +421,32 @@
??? return result;
?}
?
+void Android_JNI_HintCallback(void userdata, const char name, const char
oldValue, const char newValue) {
+??? JNIEnv env = Android_JNI_GetEnv();
+
+??? jobject callback = (jobject)userdata;
+?? jclass cls = (env)->GetObjectClass(env, callback);
+??? jmethodID method = (env)->GetMethodID(env, cls, “callback”, “(Ljava/
lang/String;Ljava/ lang/String;Ljava/lang/String; )V”);
+
+??? jstring javaName??? = (env)->NewStringUTF(env, name);
+??? jstring javaOldValue = (env)->NewStringUTF(env, oldValue);
+??? jstring javaNewValue = (env)->NewStringUTF(env, newValue);
+
+??? (env)->CallVoidMethod(env, callback, method, javaName, javaOldValue,
javaNewValue);
+
+??? (env)->DeleteLocalRef(env, javaName);
+??? (env)->DeleteLocalRef(env, javaOldValue);
+??? (env)->DeleteLocalRef(env, javaNewValue);
+}
+
+void Java_org_libsdl_app_ SDLActivity_ nativeAddHintCallback(JNIEnv
env,
jclass cls, jstring name, jobject callback) {
+??? const char utfname = (env)->GetStringUTFChars(env, name, NULL);
+
+??? SDL_AddHintCallback(utfname, Android_JNI_HintCallback, (env)->
NewGlobalRef(env, callback));
+
+??? (env)->ReleaseStringUTFChars( env, name, utfname);???
+}
+
?/
*********** ****************************** **************


??? Functions called by SDL into Java
?***************************** ****************************** **************
******/


SDL mailing list
SDL at lists.libsdl.org(mailto:SDL at lists.libsdl.org)
http://lists.libsdl.org/ listinfo.cgi/sdl-libsdl.org
(http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org)

"


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org"