From c020e5fef76ca74ed16d8b8edf1bad4a5497e14d Mon Sep 17 00:00:00 2001 From: Samuel Mira Date: Wed, 21 Dec 2022 15:39:44 +0200 Subject: [PATCH] Android: Fix UI is scaled smaller than before The 413593183bbb1137fdc784d98c171d67a167bb32 patch changed the way how the display metrics are retrieved. By doing so, it was found that the previous way retrieved the scaledDensity always equal to density. It is intentional for scaledDensity to be dependent on the font scale chosen by the user. However, this change altered not only the font scale but also the layout. This patch will make the layout dependent on the density instead of the scaledDensity and normalize the way the display metrics are retrieved among Android versions. Currently, the fontScale is ignored, QTBUG-109566 will track future developments. Fixes: QTBUG-109026 Change-Id: I6adacd17583cbe9bee368af35c50b780872ab222 Reviewed-by: Ville Voutilainen (cherry picked from commit 99893a914a821567e10935ffb8be24df7147ccd9) Reviewed-by: Qt Cherry-pick Bot --- .../org/qtproject/qt/android/QtLayout.java | 20 ++++++------------- .../android/qandroidplatformscreen.cpp | 2 +- 2 files changed, 7 insertions(+), 15 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 98d3deca8cf..80ba99f40db 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java @@ -109,11 +109,6 @@ public class QtLayout extends ViewGroup maxWidth = maxMetrics.widthPixels; maxHeight = maxMetrics.heightPixels; - density = appMetrics.density; - xdpi = appMetrics.xdpi; - ydpi = appMetrics.ydpi; - scaledDensity = appMetrics.scaledDensity; - } else { // after API 30 use getCurrentWindowMetrics for application metrics // getMaximumWindowMetrics for the screen metrics @@ -138,17 +133,14 @@ public class QtLayout extends ViewGroup maxWidth = maxMetrics.getBounds().width(); maxHeight = maxMetrics.getBounds().height(); - final Resources resources = activity.getResources(); - final Configuration configuration = resources.getConfiguration(); - density = configuration.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT; - - final DisplayMetrics displayMetrics = resources.getDisplayMetrics(); - xdpi = displayMetrics.xdpi; - ydpi = displayMetrics.ydpi; - density = displayMetrics.density; - scaledDensity = displayMetrics.scaledDensity; } + final DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics(); + xdpi = displayMetrics.xdpi; + ydpi = displayMetrics.ydpi; + density = displayMetrics.density; + scaledDensity = displayMetrics.scaledDensity; + float refreshRate = display.getRefreshRate(); if ((appWidth > appHeight) != (w > h)) { diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp index d2bb9f09f19..920a2d19f8b 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp @@ -466,7 +466,7 @@ static const int androidLogicalDpi = 72; QDpi QAndroidPlatformScreen::logicalDpi() const { - qreal lDpi = QtAndroid::scaledDensity() * androidLogicalDpi; + qreal lDpi = QtAndroid::pixelDensity() * androidLogicalDpi; return QDpi(lDpi, lDpi); }