From 3b7407ab34070f39a1e029c3e9714d4af394b233 Mon Sep 17 00:00:00 2001 From: Tae Hanazono Date: Fri, 8 Feb 2019 20:20:37 +0800 Subject: [PATCH 1/3] Fix onResume using unsupported flags in some older devices. --- .../java/org/love2d/android/GameActivity.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index 62253a9e..c37ed89a 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -171,13 +171,19 @@ public class GameActivity extends SDLActivity { super.onResume(); 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); + 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); } } From 53d24a1b5f54252a0257246f96d2d268f292123e Mon Sep 17 00:00:00 2001 From: Tae Hanazono Date: Fri, 8 Feb 2019 23:56:23 +0800 Subject: [PATCH 2/3] Added method to retrieve safe area insets. --- .../java/org/love2d/android/GameActivity.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index c37ed89a..da442458 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -36,6 +36,10 @@ public class GameActivity extends SDLActivity { public static final int EXTERNAL_STORAGE_REQUEST_CODE = 1; private static boolean immersiveActive = false; private static boolean mustCacheArchive = false; + public int safeAreaTop = 0; + public int safeAreaLeft = 0; + public int safeAreaBottom = 0; + public int safeAreaRight = 0; @Override protected String[] getLibraries() { @@ -66,6 +70,10 @@ public class GameActivity extends SDLActivity { super.onCreate(savedInstanceState); getWindowManager().getDefaultDisplay().getMetrics(metrics); + + if (android.os.Build.VERSION.SDK_INT >= 28) { + getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + } } @Override @@ -94,6 +102,8 @@ public class GameActivity extends SDLActivity { } else { gamePath = game.getPath(); } + // FIXME: Add support for "content://" URI, which is mandatory in Android Nougat + // as using "file://" protocol in that (and later) version is forbidden! } else { Log.e("GameActivity", "Unsupported scheme: '" + game.getScheme() + "'."); @@ -397,4 +407,21 @@ public class GameActivity extends SDLActivity { return ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; } + + @Keep + public boolean initializeSafeArea() { + if (android.os.Build.VERSION.SDK_INT >= 28) { + DisplayCutout cutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout(); + + if (cutout != null) { + safeAreaTop = cutout.getSafeInsetTop(); + safeAreaLeft = cutout.getSafeInsetLeft(); + safeAreaBottom = cutout.getSafeInsetBottom(); + safeAreaRight = cutout.getSafeInsetRight(); + return true; + } + } + + return false; + } } From 6eafa708f97c5b1a4b06df8d80f167d4b2f39b00 Mon Sep 17 00:00:00 2001 From: Tae Hanazono Date: Sat, 9 Feb 2019 18:53:42 +0800 Subject: [PATCH 3/3] Fix setImmersiveMode using unsupported flags in some older devices. --- .../java/org/love2d/android/GameActivity.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/love/src/main/java/org/love2d/android/GameActivity.java b/love/src/main/java/org/love2d/android/GameActivity.java index da442458..c934a862 100644 --- a/love/src/main/java/org/love2d/android/GameActivity.java +++ b/love/src/main/java/org/love2d/android/GameActivity.java @@ -215,17 +215,22 @@ public class GameActivity extends SDLActivity { 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_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 + View.SYSTEM_UI_FLAG_LAYOUT_STABLE | + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); }