Allowing enabling and disabling of immersive mode via borderless setting and love.window.setMode()

This commit is contained in:
fysx
2015-01-20 16:01:43 +01:00
parent 36216c16be
commit 42f6beaa7e
4 changed files with 64 additions and 7 deletions
+14
View File
@@ -35,6 +35,20 @@ namespace love
namespace android
{
void setBorderless (bool borderless_active) {
JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv();
jobject activity = (jobject) SDL_AndroidGetActivity();
jclass clazz (env->GetObjectClass(activity));
jmethodID method_id = env->GetMethodID (clazz, "setImmersiveMode", "(Z)V");
env->CallVoidMethod (activity, method_id, borderless_active);
env->DeleteLocalRef (activity);
env->DeleteLocalRef (clazz);
}
double getScreenScale()
{
static double result = -1.;
+2
View File
@@ -32,6 +32,8 @@ namespace love
namespace android
{
void setBorderless (bool borderless_active);
/**
* Gets the scale factor of the window's screen, e.g. on Retina displays this
* will return 2.0.
@@ -244,6 +244,10 @@ bool Window::setWindow(int width, int height, WindowSettings *settings)
if (!gfx->setMode(width, height, curMode.settings.sRGB))
showMessageBox("Could not set graphics mode", "Unsupported OpenGL version?", MESSAGEBOX_ERROR, true);
#ifdef LOVE_ANDROID
love::android::setBorderless(f.borderless);
#endif
}
// Make sure the mouse keeps its previous grab setting.
+44 -7
View File
@@ -12,6 +12,7 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.app.DownloadManager;
import android.app.ProgressDialog;
import android.content.Context;
@@ -36,6 +37,7 @@ public class GameActivity extends SDLActivity {
private static String gamePath = "";
private static Context context;
private static Vibrator vibrator;
private static boolean immersiveActive = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -82,13 +84,48 @@ public class GameActivity extends SDLActivity {
@Override
public void onResume() {
super.onResume();
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);
if (immersiveActive) {
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);
}
}
public void setImmersiveMode (boolean immersive_mode) {
immersiveActive = immersive_mode;
final Object lock = new Object();
final boolean immersive_enabled = immersive_mode;
synchronized (lock) {
runOnUiThread (new Runnable() {
@Override
public void run() {
synchronized (lock) {
if (immersive_enabled) {
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 {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
}
lock.notify();
}
}
});
};
}
public static String getGamePath() {