mirror of
https://github.com/love2d/love-android.git
synced 2026-08-12 08:31:04 +02:00
Allowing enabling and disabling of immersive mode via borderless setting and love.window.setMode()
This commit is contained in:
@@ -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.;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user