From 1141a6fa17fa9ae7bdd28f8294ba8543e837dcef Mon Sep 17 00:00:00 2001 From: Rami Potinkara Date: Thu, 5 Jun 2025 13:13:49 +0300 Subject: [PATCH] Android: fix QtDisplayManager getDisplaySize function This patch fixed QtDisplayManager::getDisplaySize function to use API's that do not require MANAGE_APP_TOKENS permission. The function previously failed on 32-bit architectures with Android 11 aka SDK 30 aka VERSION R due to createWindowContext requiring MANAGE_APP_TOKENS permission. The earlier try-catch lead to next error, because of invalid values. Amends: 98120622ff1f6f87664f4c42e830000a21391751 Fixes: QTBUG-137027 Pick-to: 6.10 6.9 6.8 6.5 Change-Id: Ia9c3a64ea41ad0575a34a96858851a1123cfc915 Reviewed-by: Assam Boudjelthia --- .../qt/android/QtDisplayManager.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java index 92162132eba..d5933aa4043 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java @@ -18,6 +18,7 @@ import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; +import android.view.WindowMetrics; import android.view.WindowInsetsController; import android.view.Window; @@ -284,16 +285,18 @@ class QtDisplayManager } else { try { Context displayContext = context.createDisplayContext(display); - Context windowsContext = displayContext.createWindowContext( - WindowManager.LayoutParams.TYPE_APPLICATION, null); - WindowManager windowManager = (WindowManager) windowsContext.getSystemService( - Context.WINDOW_SERVICE); - Rect bounds = windowManager.getMaximumWindowMetrics().getBounds(); - return new Size(bounds.width(), bounds.height()); - } catch (SecurityException e) { + WindowManager windowManager = displayContext.getSystemService(WindowManager.class); + if (windowManager != null) { + WindowMetrics metrics = windowManager.getCurrentWindowMetrics(); + Rect areaBounds = metrics.getBounds(); + return new Size(areaBounds.width(), areaBounds.height()); + } else { + Log.e(QtTAG, "getDisplaySize(): WindowManager null, display ID" + display.getDisplayId()); + } + } catch (Exception e) { Log.e(QtTAG, "Failed to retrieve display metrics with " + e); - return new Size(0, 0); } + return new Size(0, 0); } }