diff options
author | Assam Boudjelthia <[email protected]> | 2025-01-06 18:40:06 +0200 |
---|---|---|
committer | Assam Boudjelthia <[email protected]> | 2025-01-22 20:33:18 +0200 |
commit | 3efd1996a39a9088d6d734959b45c26825688ee7 (patch) | |
tree | ae93373a9b53d7921fb7889d9aa9fc3c8c5d1837 | |
parent | 3305eb10da541be036e6fa77fb2b3a80bfae7cda (diff) |
Android: update density on its own when it's changed
Instead of doing it every time under setDisplayMetrics().
Task-number: QTBUG-132716
Change-Id: I0887c086d7f653b0170e107a86cb0115582bbc89
Reviewed-by: Petri Virkkunen <[email protected]>
6 files changed, 27 insertions, 13 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java index 291d91bb8bd..b42b3c960a1 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java @@ -179,6 +179,9 @@ public class QtActivityBase extends Activity if ((diff & ActivityInfo.CONFIG_LOCALE) != 0) QtNative.updateLocale(); + if ((diff & ActivityInfo.CONFIG_DENSITY) != 0) + QtDisplayManager.updateScreenDensity(this); + m_prevConfig = new Configuration(newConfig); } 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 191e3c4e520..a6948662382 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -146,6 +146,7 @@ class QtActivityDelegate extends QtActivityDelegateBase handleUiModeChange(m_activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK); QtDisplayManager.updateRefreshRate(m_activity); + QtDisplayManager.updateScreenDensity(m_activity); m_layout.getViewTreeObserver().addOnPreDrawListener(() -> { if (!m_inputDelegate.isKeyboardVisible()) 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 61adb44bc4e..d6b44a29b62 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java @@ -6,6 +6,7 @@ package org.qtproject.qt.android; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Rect; import android.hardware.display.DisplayManager; import android.os.Build; @@ -34,14 +35,14 @@ class QtDisplayManager { // screen methods static native void setDisplayMetrics(int screenWidthPixels, int screenHeightPixels, int availableWidthPixels, int availableHeightPixels, - double XDpi, double YDpi, - double density); + double XDpi, double YDpi); static native void handleOrientationChanged(int newRotation, int nativeOrientation); static native void handleRefreshRateChanged(float refreshRate); static native void handleUiDarkModeChanged(int newUiMode); static native void handleScreenAdded(int displayId); static native void handleScreenChanged(int displayId); static native void handleScreenRemoved(int displayId); + static native void handleScreenDensityChanged(double density); // screen methods private boolean m_isFullScreen = false; @@ -92,6 +93,13 @@ class QtDisplayManager { m_previousRotation = rotation; } + static void updateScreenDensity(Activity activity) + { + Resources resources = activity == null ? Resources.getSystem() : activity.getResources(); + double density = resources.getDisplayMetrics().density; + QtDisplayManager.handleScreenDensityChanged(density); + } + private static int getNativeOrientation(Activity activity, int rotation) { int orientation = activity.getResources().getConfiguration().orientation; @@ -278,13 +286,10 @@ class QtDisplayManager { final DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics(); - double density = displayMetrics.density; - Size displaySize = getDisplaySize(activity, QtDisplayManager.getDisplay(activity)); setDisplayMetrics(displaySize.getWidth(), displaySize.getHeight(), width, height, - getXDpi(displayMetrics), getYDpi(displayMetrics), - density); + getXDpi(displayMetrics), getYDpi(displayMetrics)); } static float getXDpi(final DisplayMetrics metrics) { diff --git a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java index 1ac7120e33f..ab75369976b 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java @@ -116,7 +116,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase QtDisplayManager.setApplicationDisplayMetrics(m_activity, metrics.widthPixels, metrics.heightPixels); QtDisplayManager.updateRefreshRate(m_activity); - + QtDisplayManager.updateScreenDensity(m_activity); }); } } diff --git a/src/android/jar/src/org/qtproject/qt/android/QtServiceEmbeddedDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtServiceEmbeddedDelegate.java index a7a88343aa4..86d6f2a80d1 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtServiceEmbeddedDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtServiceEmbeddedDelegate.java @@ -44,10 +44,10 @@ class QtServiceEmbeddedDelegate implements QtEmbeddedViewInterface, QtNative.App QtDisplayManager.setDisplayMetrics( maxWidth, maxHeight, maxWidth, maxHeight, - QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics), - metrics.density); + QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics)); QtDisplayManager.updateRefreshRate(m_service); + QtDisplayManager.handleScreenDensityChanged(metrics.density); }); } } diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index b7cc694d752..62348b473c0 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -568,12 +568,10 @@ static void terminateQt(JNIEnv *env, jclass /*clazz*/) static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWidthPixels, jint screenHeightPixels, jint availableWidthPixels, jint availableHeightPixels, - jdouble xdpi, jdouble ydpi, - jdouble density) + jdouble xdpi, jdouble ydpi) { m_availableWidthPixels = availableWidthPixels; m_availableHeightPixels = availableHeightPixels; - m_density = density; const QSize screenSize(screenWidthPixels, screenHeightPixels); // available geometry always starts from top left @@ -713,6 +711,12 @@ static void handleUiDarkModeChanged(JNIEnv */*env*/, jobject /*thiz*/, jint newU } Q_DECLARE_JNI_NATIVE_METHOD(handleUiDarkModeChanged) +static void handleScreenDensityChanged(JNIEnv */*env*/, jclass /*cls*/, jdouble density) +{ + m_density = density; +} +Q_DECLARE_JNI_NATIVE_METHOD(handleScreenDensityChanged) + static void onActivityResult(JNIEnv */*env*/, jclass /*cls*/, jint requestCode, jint resultCode, @@ -795,7 +799,8 @@ static bool registerNatives(QJniEnvironment &env) Q_JNI_NATIVE_METHOD(handleScreenAdded), Q_JNI_NATIVE_METHOD(handleScreenChanged), Q_JNI_NATIVE_METHOD(handleScreenRemoved), - Q_JNI_NATIVE_METHOD(handleUiDarkModeChanged) + Q_JNI_NATIVE_METHOD(handleUiDarkModeChanged), + Q_JNI_NATIVE_METHOD(handleScreenDensityChanged) }); success = success |