summaryrefslogtreecommitdiffstats
path: root/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-10-26 10:36:32 +0300
committerSamuel Mira <samuel.mira@qt.io>2022-11-10 15:53:43 +0200
commit45b98e1ac708faa6c7e6f5bd26e23cc0e408b4e0 (patch)
tree1750b3e39c88be9af14f3fdc850ab86ca060a92c /src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
parent807357873340b775c5535a5ead67c97161e43df0 (diff)
Android: Fix incorrect fullscreen dimensions
The insets used to calculate the correct height were not the best choice. It used display cutout insets which would work correctly on most devices, but in the case of an emulator or a device without a camera, it could fail to calculate correctly. Task-number: QTBUG-107604 Task-number: QTBUG-107709 Task-number: QTBUG-107523 Change-Id: I8c4da83ae7359a0c133dbeb02dbd2cd260565f78 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit d53ea82950e0662b8265642b840a12d9f9556888)
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtLayout.java')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index 7c75137ff0..5bf1b2ff4b 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -126,8 +126,16 @@ public class QtLayout extends ViewGroup
final DisplayMetrics appMetrics = new DisplayMetrics();
display.getMetrics(appMetrics);
- appWidth = appMetrics.widthPixels;
- appHeight = appMetrics.heightPixels;
+ final WindowInsets rootInsets = getRootWindowInsets();
+
+ insetLeft = rootInsets.getStableInsetLeft();
+ insetTop = rootInsets.getStableInsetTop();
+
+ int insetsWidth = rootInsets.getStableInsetRight() + rootInsets.getStableInsetLeft();
+ int insetsHeight = rootInsets.getStableInsetTop() + rootInsets.getStableInsetBottom();
+
+ appWidth = appMetrics.widthPixels - insetsWidth;
+ appHeight = appMetrics.heightPixels - insetsHeight;
final DisplayMetrics maxMetrics = new DisplayMetrics();
display.getRealMetrics(maxMetrics);
@@ -139,10 +147,6 @@ public class QtLayout extends ViewGroup
xdpi = appMetrics.xdpi;
ydpi = appMetrics.ydpi;
scaledDensity = appMetrics.scaledDensity;
-
- final WindowInsets rootInsets = getRootWindowInsets();
- insetLeft = rootInsets.getSystemWindowInsetLeft();
- insetTop = rootInsets.getSystemWindowInsetTop();
} else {
// after API 30 use getCurrentWindowMetrics for application metrics
// getMaximumWindowMetrics for the screen metrics
@@ -151,6 +155,7 @@ public class QtLayout extends ViewGroup
display = activity.getDisplay();
final WindowMetrics appMetrics = windowManager.getCurrentWindowMetrics();
+ final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
final WindowInsets windowInsets = appMetrics.getWindowInsets();
Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()
@@ -162,10 +167,14 @@ public class QtLayout extends ViewGroup
int insetsWidth = insets.right + insets.left;
int insetsHeight = insets.top + insets.bottom;
+ if (h == maxMetrics.getBounds().height()) {
+ //when h == maxheight the system is ignoring insets
+ insetsWidth = insetsHeight = insetLeft = insetTop = 0;
+ }
+
appWidth = appMetrics.getBounds().width() - insetsWidth;
appHeight = appMetrics.getBounds().height() - insetsHeight;
- final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
maxWidth = maxMetrics.getBounds().width();
maxHeight = maxMetrics.getBounds().height();