summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAssam Boudjelthia <[email protected]>2025-01-06 18:40:06 +0200
committerAssam Boudjelthia <[email protected]>2025-01-22 20:33:18 +0200
commit3efd1996a39a9088d6d734959b45c26825688ee7 (patch)
treeae93373a9b53d7921fb7889d9aa9fc3c8c5d1837
parent3305eb10da541be036e6fa77fb2b3a80bfae7cda (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]>
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java3
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java1
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java17
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtServiceEmbeddedDelegate.java4
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp13
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