From 061a057d5b1d99436633f620aaeca7df667e5836 Mon Sep 17 00:00:00 2001 From: Rami Potinkara Date: Fri, 1 Sep 2023 07:57:58 +0300 Subject: [PATCH] Android: fix display cut mode being short edges always Fixed _SHORT_EDGES and _DEFAULT conflict. Mapping from Qt API's to Android's is following: -QWindow::FullScreen -> _DEFAULT -Qt::MaximizeUsingFullscreenGeometryHint -> _TRANSLUCENT -Others -> _NEVER -Not supported -> _SHORT_EDGES (Use Java as workaround) For example in QML: -visibility: Window.FullScreen -flags: Qt.MaximizeUsingFullscreenGeometryHint Fixes: QTBUG-114437 Task-number: QTBUG-96877 Pick-to: 6.5 6.2 Change-Id: I730b3e3f76401b52548ece05dee60526d0be8207 Reviewed-by: Ville Voutilainen (cherry picked from commit adb7e2525e0d4db622833b6d05d6339e511c2480) Reviewed-by: Qt Cherry-pick Bot --- .../qtproject/qt/android/QtActivityDelegate.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index 31440cfa02c..2d93586db0a 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -88,6 +88,7 @@ public class QtActivityDelegate private static final String APPLICATION_PARAMETERS_KEY = "application.parameters"; private static final String STATIC_INIT_CLASSES_KEY = "static.init.classes"; + // Keep in sync with QtAndroid::SystemUiVisibility in androidjnimain.h public static final int SYSTEM_UI_VISIBILITY_NORMAL = 0; public static final int SYSTEM_UI_VISIBILITY_FULLSCREEN = 1; public static final int SYSTEM_UI_VISIBILITY_TRANSLUCENT = 2; @@ -133,13 +134,13 @@ public class QtActivityDelegate return; m_systemUiVisibility = systemUiVisibility; - setLayoutInDisplayCutoutMode(); int systemUiVisibilityFlags = View.SYSTEM_UI_FLAG_VISIBLE; switch (m_systemUiVisibility) { case SYSTEM_UI_VISIBILITY_NORMAL: m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + setDisplayCutoutLayout(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER); break; case SYSTEM_UI_VISIBILITY_FULLSCREEN: m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); @@ -151,12 +152,14 @@ public class QtActivityDelegate | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.INVISIBLE; + setDisplayCutoutLayout(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT); break; case SYSTEM_UI_VISIBILITY_TRANSLUCENT: m_activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); m_activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + setDisplayCutoutLayout(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS); break; }; @@ -165,15 +168,10 @@ public class QtActivityDelegate m_layout.requestLayout(); } - private void setLayoutInDisplayCutoutMode() + private void setDisplayCutoutLayout(int cutoutLayout) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - int cutOutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; - if (SYSTEM_UI_VISIBILITY_FULLSCREEN == m_systemUiVisibility) - cutOutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - - m_activity.getWindow().getAttributes().layoutInDisplayCutoutMode = cutOutMode; - } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) + m_activity.getWindow().getAttributes().layoutInDisplayCutoutMode = cutoutLayout; } public void updateFullScreen()