diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index 7ac7f143..edda34a9 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -60,6 +60,7 @@ public class GameActivity extends SDLActivity { private static boolean immersiveActive = false; private static boolean mustCacheArchive = false; private boolean storagePermissionUnnecessary = false; + private boolean shortEdgesMode = false; public boolean embed = false; public int safeAreaTop = 0; public int safeAreaLeft = 0; @@ -117,7 +118,8 @@ public class GameActivity extends SDLActivity { getWindowManager().getDefaultDisplay().getMetrics(metrics); if (android.os.Build.VERSION.SDK_INT >= 28) { - getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; + shortEdgesMode = false; } } @@ -263,68 +265,18 @@ public class GameActivity extends SDLActivity { @Override public void onResume() { super.onResume(); - - if (immersiveActive) { - int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - - if (android.os.Build.VERSION.SDK_INT >= 16) { - flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_FULLSCREEN; - } - if (android.os.Build.VERSION.SDK_INT >= 19) { - flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - } - - getWindow().getDecorView().setSystemUiVisibility(flags); - } } @Keep public void setImmersiveMode(boolean immersive_mode) { - if (android.os.Build.VERSION.SDK_INT < 11) { - // The API getWindow().getDecorView().setSystemUiVisibility() was - // added in Android 11 (a.k.a. Honeycomb, a.k.a. 3.0.x). If we run - // on this we do nothing. - return; + if (android.os.Build.VERSION.SDK_INT >= 28) { + getWindow().getAttributes().layoutInDisplayCutoutMode = immersive_mode ? + WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES : + WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; + shortEdgesMode = 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) { - int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - - if (android.os.Build.VERSION.SDK_INT >= 16) { - flags |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_FULLSCREEN; - } - if (android.os.Build.VERSION.SDK_INT >= 19) { - flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - } - getWindow().getDecorView().setSystemUiVisibility(flags); - } else if (android.os.Build.VERSION.SDK_INT >= 16) { - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - ); - } - - lock.notify(); - } - } - }); - } - ; } @Keep @@ -563,7 +515,7 @@ public class GameActivity extends SDLActivity { @Keep public boolean initializeSafeArea() { - if (android.os.Build.VERSION.SDK_INT >= 28) { + if (android.os.Build.VERSION.SDK_INT >= 28 && shortEdgesMode) { DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout(); if (cutout != null) {