diff --git a/jni/love/src/common/android.cpp b/jni/love/src/common/android.cpp index 9b55f430..1fb2d79d 100644 --- a/jni/love/src/common/android.cpp +++ b/jni/love/src/common/android.cpp @@ -49,6 +49,24 @@ void setImmersive (bool immersive_active) { env->DeleteLocalRef (clazz); } +bool getImmersive () { + JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); + + jobject activity = (jobject) SDL_AndroidGetActivity(); + + jclass clazz (env->GetObjectClass(activity)); + jmethodID method_id = env->GetMethodID (clazz, "getImmersiveMode", "()Z"); + + jboolean immersive_active = env->CallBooleanMethod (activity, method_id); + + env->DeleteLocalRef (activity); + env->DeleteLocalRef (clazz); + + if (immersive_active) + return true; + return false; +} + double getScreenScale() { static double result = -1.; diff --git a/jni/love/src/common/android.h b/jni/love/src/common/android.h index 16d4f763..e879a88d 100644 --- a/jni/love/src/common/android.h +++ b/jni/love/src/common/android.h @@ -32,7 +32,11 @@ namespace love namespace android { +/** + * Enables or disables immersive mode where the navigation bar is hidden. + **/ void setImmersive (bool immersive_active); +bool getImmersive (); /** * Gets the scale factor of the window's screen, e.g. on Retina displays this diff --git a/jni/love/src/modules/window/sdl/Window.cpp b/jni/love/src/modules/window/sdl/Window.cpp index cdc8782c..d4ab7074 100644 --- a/jni/love/src/modules/window/sdl/Window.cpp +++ b/jni/love/src/modules/window/sdl/Window.cpp @@ -442,6 +442,10 @@ void Window::updateSettings(const WindowSettings &newsettings) curMode.settings.fstype = newsettings.fstype; } +#ifdef LOVE_ANDROID + curMode.settings.fullscreen = love::android::getImmersive(); +#endif + // The min width/height is set to 0 internally in SDL when in fullscreen. if (curMode.settings.fullscreen) { @@ -518,6 +522,10 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype) } } +#ifdef LOVE_ANDROID + love::android::setImmersive(fullscreen); +#endif + if (SDL_SetWindowFullscreen(window, sdlflags) == 0) { SDL_GL_MakeCurrent(window, context); @@ -535,10 +543,6 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype) SDL_GL_GetDrawableSize(window, &width, &height); #endif -#ifdef LOVE_ANDROID - love::android::setImmersive(fullscreen); -#endif - gfx->setViewportSize(width, height); } diff --git a/src/org/love2d/android/GameActivity.java b/src/org/love2d/android/GameActivity.java index 9d556cc4..6f4a44bd 100644 --- a/src/org/love2d/android/GameActivity.java +++ b/src/org/love2d/android/GameActivity.java @@ -143,6 +143,10 @@ public class GameActivity extends SDLActivity { }; } + public boolean getImmersiveMode () { + return immersiveActive; + } + public static String getGamePath() { Log.d ("GameActivity", "called getGamePath(), game path = " + gamePath); return gamePath;