From 0abdca879013cd3730b8a1a8b794d11a06fd3c22 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Mon, 6 Jan 2025 16:22:07 +0200 Subject: [PATCH] Android: use one common getDisplay() method Use one method getDisplay() which handles different API levels and call it from various code paths instead of doing the same over and over. Task-number: QTBUG-132716 Change-Id: I0b246631b7dd45789f01e6fa6360d8c76c13fee9 Reviewed-by: Petri Virkkunen --- .../qt/android/QtActivityDelegate.java | 2 +- .../qt/android/QtActivityLoader.java | 2 +- .../qt/android/QtDisplayManager.java | 38 +++++++++---------- .../qtproject/qt/android/QtInputDelegate.java | 6 +-- 4 files changed, 22 insertions(+), 26 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 c7fa840be78..191e3c4e520 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -154,7 +154,7 @@ class QtActivityDelegate extends QtActivityDelegateBase Rect r = new Rect(); m_activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); DisplayMetrics metrics = new DisplayMetrics(); - m_activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + QtDisplayManager.getDisplay(m_activity).getMetrics(metrics); final int kbHeight = metrics.heightPixels - r.bottom; if (kbHeight < 0) { m_inputDelegate.setKeyboardVisibility(false, System.nanoTime()); diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java index 2d1463778f0..a93889c03dc 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java @@ -45,7 +45,7 @@ class QtActivityLoader extends QtLoader { int size = m_activity.getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); if (size < 36 || size > 512) { // check size sanity DisplayMetrics metrics = new DisplayMetrics(); - m_activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + QtDisplayManager.getDisplay(m_activity).getMetrics(metrics); size = metrics.densityDpi / 10 * 3; if (size < 36) size = 36; 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 ab15684e702..17902b785fa 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java @@ -75,20 +75,9 @@ class QtDisplayManager { }; } - @SuppressWarnings("deprecation") static void updateRefreshRate(Context context) { - Display display; - Activity activity = (Activity) context; - if (activity != null) { - display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) - ? activity.getWindowManager().getDefaultDisplay() - : activity.getDisplay(); - } else { - final DisplayManager dm = context.getSystemService(DisplayManager.class); - display = dm.getDisplay(Display.DEFAULT_DISPLAY); - } - + Display display = getDisplay(context); float refreshRate = display != null ? display.getRefreshRate() : 60.0f; QtDisplayManager.handleRefreshRateChanged(refreshRate); } @@ -104,10 +93,7 @@ class QtDisplayManager { } static int getDisplayRotation(Activity activity) { - Display display = Build.VERSION.SDK_INT < Build.VERSION_CODES.R ? - activity.getWindowManager().getDefaultDisplay() : - activity.getDisplay(); - + Display display = QtDisplayManager.getDisplay(activity); return display != null ? display.getRotation() : 0; } @@ -231,6 +217,20 @@ class QtDisplayManager { } } + @SuppressWarnings("deprecation") + static Display getDisplay(Context context) + { + Activity activity = (Activity) context; + if (activity != null) { + return (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? activity.getWindowManager().getDefaultDisplay() + : activity.getDisplay(); + } + + final DisplayManager dm = context.getSystemService(DisplayManager.class); + return dm.getDisplay(Display.DEFAULT_DISPLAY); + } + @UsedFromNativeCode static Display getDisplay(Context context, int displayId) { @@ -279,7 +279,7 @@ class QtDisplayManager { final WindowInsets rootInsets = activity.getWindow().getDecorView().getRootWindowInsets(); final WindowManager windowManager = activity.getWindowManager(); - Display display; + Display display = QtDisplayManager.getDisplay(activity); int insetLeft; int insetTop; @@ -288,8 +288,6 @@ class QtDisplayManager { int maxHeight; if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { - display = windowManager.getDefaultDisplay(); - final DisplayMetrics maxMetrics = new DisplayMetrics(); display.getRealMetrics(maxMetrics); maxWidth = maxMetrics.widthPixels; @@ -298,8 +296,6 @@ class QtDisplayManager { insetLeft = rootInsets.getStableInsetLeft(); insetTop = rootInsets.getStableInsetTop(); } else { - display = activity.getDisplay(); - final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics(); maxWidth = maxMetrics.getBounds().width(); maxHeight = maxMetrics.getBounds().height(); diff --git a/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java index 358e838a9bd..c027c2e6a9b 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java @@ -275,7 +275,7 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt Rect r = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + QtDisplayManager.getDisplay(activity).getMetrics(metrics); int screenHeight = metrics.heightPixels; final int kbHeight = screenHeight - r.bottom; isKeyboardHidden = kbHeight < screenHeight * KEYBOARD_TO_SCREEN_RATIO; @@ -359,7 +359,7 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt private boolean updateSoftInputMode(Activity activity, int height) { DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + QtDisplayManager.getDisplay(activity).getMetrics(metrics); // If the screen is in portrait mode than we estimate that keyboard height // will not be higher than 2/5 of the screen. Otherwise we estimate that keyboard height @@ -401,7 +401,7 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt if (!m_keyboardIsVisible) return; DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); + QtDisplayManager.getDisplay(activity).getMetrics(metrics); Rect r = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); if (metrics.heightPixels != r.bottom) {