|
|
@@ -38,6 +38,8 @@ import android.view.Surface;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
import android.view.Window;
|
|
|
+import android.view.WindowInsets;
|
|
|
+import android.view.WindowInsetsController;
|
|
|
import android.view.WindowManager;
|
|
|
import android.view.inputmethod.BaseInputConnection;
|
|
|
import android.view.inputmethod.EditorInfo;
|
|
|
@@ -773,21 +775,45 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|
|
Window window = ((Activity) context).getWindow();
|
|
|
if (window != null) {
|
|
|
if ((msg.obj instanceof Integer) && ((Integer) msg.obj != 0)) {
|
|
|
- int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
|
|
|
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
|
|
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
|
|
|
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
|
|
|
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
|
|
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
|
|
|
- window.getDecorView().setSystemUiVisibility(flags);
|
|
|
- window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
- window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
|
|
+ if (Build.VERSION.SDK_INT >= 30 /* Android 11 (R) */) {
|
|
|
+ // The legacy setSystemUiVisibility() flags are ignored on
|
|
|
+ // Android 15+ (API 35+), where edge-to-edge is enforced for
|
|
|
+ // apps targeting that SDK, so the status/navigation bars
|
|
|
+ // would never hide. Use WindowInsetsController instead.
|
|
|
+ window.setDecorFitsSystemWindows(false);
|
|
|
+ final WindowInsetsController controller = window.getInsetsController();
|
|
|
+ if (controller != null) {
|
|
|
+ controller.hide(WindowInsets.Type.systemBars());
|
|
|
+ // Sticky-immersive (replaces SYSTEM_UI_FLAG_IMMERSIVE_STICKY):
|
|
|
+ // a swipe shows the bars transiently, then they auto-hide.
|
|
|
+ controller.setSystemBarsBehavior(
|
|
|
+ WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
|
|
|
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
|
|
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
|
|
|
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
|
|
|
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
|
|
|
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
|
|
|
+ window.getDecorView().setSystemUiVisibility(flags);
|
|
|
+ window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
+ window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
|
|
+ }
|
|
|
SDLActivity.mFullscreenModeActive = true;
|
|
|
} else {
|
|
|
- int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE;
|
|
|
- window.getDecorView().setSystemUiVisibility(flags);
|
|
|
- window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
|
|
- window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
+ if (Build.VERSION.SDK_INT >= 30 /* Android 11 (R) */) {
|
|
|
+ window.setDecorFitsSystemWindows(true);
|
|
|
+ final WindowInsetsController controller = window.getInsetsController();
|
|
|
+ if (controller != null) {
|
|
|
+ controller.show(WindowInsets.Type.systemBars());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE;
|
|
|
+ window.getDecorView().setSystemUiVisibility(flags);
|
|
|
+ window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
|
|
+ window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
+ }
|
|
|
SDLActivity.mFullscreenModeActive = false;
|
|
|
}
|
|
|
if (Build.VERSION.SDK_INT >= 28 /* Android 9 (Pie) */) {
|
|
|
@@ -1623,7 +1649,13 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|
|
private final Runnable rehideSystemUi = new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) {
|
|
|
+ if (Build.VERSION.SDK_INT >= 30 /* Android 11 (R) */) {
|
|
|
+ final WindowInsetsController controller =
|
|
|
+ SDLActivity.this.getWindow().getInsetsController();
|
|
|
+ if (controller != null) {
|
|
|
+ controller.hide(WindowInsets.Type.systemBars());
|
|
|
+ }
|
|
|
+ } else if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) {
|
|
|
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
|
|
|
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
|
|
|
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
|