diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-10-26 10:36:32 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-11-08 05:07:02 +0000 |
commit | 58482c63f090dbfdf0c6ad8ee317b24fbefe798e (patch) | |
tree | 283e8586759d1ce6c44966583d07142ae6be464f /src | |
parent | 87a8f36ff74f80b4deff062eb585009fdd4c74cf (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)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtLayout.java | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java index a234f921d3..3c01c76400 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java @@ -90,8 +90,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); @@ -104,9 +112,6 @@ public class QtLayout extends ViewGroup 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 @@ -115,10 +120,10 @@ 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() - | WindowInsets.Type.displayCutout()); + Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.tappableElement()); insetLeft = insets.left; insetTop = insets.top; @@ -126,10 +131,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(); |