summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kde.org>2020-10-13 18:19:59 +0300
committerIvan Solovev <ivan.solovev@qt.io>2022-01-28 00:22:41 +0100
commitc1a93b20ff1fec370b2483276b74f07eb54486ef (patch)
tree7fa22aa519672ba7fb13e89108fd79f25bb475a2 /src/android
parente76d27d3ed2475169166a8666a3d90a82444fdbf (diff)
[Android]: Handle the screen name, modes and refreshRate properly
Fixes: QTBUG-87136 Fixes: QTBUG-93823 Fixes: QTBUG-94959 Pick-to: 6.3 6.2 5.15 Change-Id: Id480e22611ec949b5e3ee780fc695fb502a5950c Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java13
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtLayout.java21
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java62
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java2
4 files changed, 46 insertions, 52 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 3c387f1f9d..8cf71597e4 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -69,6 +69,7 @@ import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
+import android.view.Display;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.Menu;
@@ -698,8 +699,13 @@ public class QtActivityDelegate
@Override
public void onDisplayChanged(int displayId) {
- m_currentRotation = m_activity.getWindowManager().getDefaultDisplay().getRotation();
+ Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
+ ? m_activity.getWindowManager().getDefaultDisplay()
+ : m_activity.getDisplay();
+ m_currentRotation = display.getRotation();
QtNative.handleOrientationChanged(m_currentRotation, m_nativeOrientation);
+ float refreshRate = display.getRefreshRate();
+ QtNative.handleRefreshRateChanged(refreshRate);
}
@Override
@@ -830,6 +836,11 @@ public class QtActivityDelegate
QtNative.handleOrientationChanged(rotation, m_nativeOrientation);
m_currentRotation = rotation;
+ float refreshRate = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
+ ? m_activity.getWindowManager().getDefaultDisplay().getRefreshRate()
+ : m_activity.getDisplay().getRefreshRate();
+ QtNative.handleRefreshRateChanged(refreshRate);
+
m_layout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
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 a65df48a17..2e52770cc5 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java
@@ -42,8 +42,10 @@ package org.qtproject.qt.android;
import android.app.Activity;
import android.content.Context;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
+import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
@@ -73,7 +75,10 @@ public class QtLayout extends ViewGroup
WindowInsets insets = getRootWindowInsets();
DisplayMetrics realMetrics = new DisplayMetrics();
- ((Activity) getContext()).getWindowManager().getDefaultDisplay().getRealMetrics(realMetrics);
+ Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
+ ? ((Activity)getContext()).getWindowManager().getDefaultDisplay()
+ : ((Activity)getContext()).getDisplay();
+ display.getRealMetrics(realMetrics);
boolean isFullScreenView = h == realMetrics.heightPixels;
@@ -85,16 +90,10 @@ public class QtLayout extends ViewGroup
int usableAreaWidth = w - insetLeft - insetRight;
int usableAreaHeight = h - insetTop - insetBottom;
- QtNative.setApplicationDisplayMetrics(realMetrics.widthPixels,
- realMetrics.heightPixels,
- insetLeft,
- insetTop,
- usableAreaWidth,
- usableAreaHeight,
- realMetrics.xdpi,
- realMetrics.ydpi,
- realMetrics.scaledDensity,
- realMetrics.density);
+ QtNative.setApplicationDisplayMetrics(
+ realMetrics.widthPixels, realMetrics.heightPixels, insetLeft, insetTop,
+ usableAreaWidth, usableAreaHeight, realMetrics.xdpi, realMetrics.ydpi,
+ realMetrics.scaledDensity, realMetrics.density, display.getRefreshRate());
if (m_startApplicationRunnable != null) {
m_startApplicationRunnable.run();
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
index 3c26e6d4f2..11b27f96c0 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
@@ -103,6 +103,7 @@ public class QtNative
private static int m_displayMetricsAvailableTopPixels = 0;
private static int m_displayMetricsAvailableWidthPixels = 0;
private static int m_displayMetricsAvailableHeightPixels = 0;
+ private static float m_displayMetricsRefreshRate = 60;
private static double m_displayMetricsXDpi = .0;
private static double m_displayMetricsYDpi = .0;
private static double m_displayMetricsScaledDensity = 1.0;
@@ -634,16 +635,13 @@ public class QtNative
@Override
public void run() {
res[0] = startQtAndroidPlugin(qtParams, environment);
- setDisplayMetrics(m_displayMetricsScreenWidthPixels,
- m_displayMetricsScreenHeightPixels,
- m_displayMetricsAvailableLeftPixels,
- m_displayMetricsAvailableTopPixels,
- m_displayMetricsAvailableWidthPixels,
- m_displayMetricsAvailableHeightPixels,
- m_displayMetricsXDpi,
- m_displayMetricsYDpi,
- m_displayMetricsScaledDensity,
- m_displayMetricsDensity);
+ setDisplayMetrics(
+ m_displayMetricsScreenWidthPixels, m_displayMetricsScreenHeightPixels,
+ m_displayMetricsAvailableLeftPixels, m_displayMetricsAvailableTopPixels,
+ m_displayMetricsAvailableWidthPixels,
+ m_displayMetricsAvailableHeightPixels, m_displayMetricsXDpi,
+ m_displayMetricsYDpi, m_displayMetricsScaledDensity,
+ m_displayMetricsDensity, m_displayMetricsRefreshRate);
}
});
m_qtThread.post(new Runnable() {
@@ -658,16 +656,12 @@ public class QtNative
return res[0];
}
- public static void setApplicationDisplayMetrics(int screenWidthPixels,
- int screenHeightPixels,
- int availableLeftPixels,
- int availableTopPixels,
+ public static void setApplicationDisplayMetrics(int screenWidthPixels, int screenHeightPixels,
+ int availableLeftPixels, int availableTopPixels,
int availableWidthPixels,
- int availableHeightPixels,
- double XDpi,
- double YDpi,
- double scaledDensity,
- double density)
+ int availableHeightPixels, double XDpi,
+ double YDpi, double scaledDensity,
+ double density, float refreshRate)
{
/* Fix buggy dpi report */
if (XDpi < android.util.DisplayMetrics.DENSITY_LOW)
@@ -677,16 +671,9 @@ public class QtNative
synchronized (m_mainActivityMutex) {
if (m_started) {
- setDisplayMetrics(screenWidthPixels,
- screenHeightPixels,
- availableLeftPixels,
- availableTopPixels,
- availableWidthPixels,
- availableHeightPixels,
- XDpi,
- YDpi,
- scaledDensity,
- density);
+ setDisplayMetrics(screenWidthPixels, screenHeightPixels, availableLeftPixels,
+ availableTopPixels, availableWidthPixels, availableHeightPixels,
+ XDpi, YDpi, scaledDensity, density, refreshRate);
} else {
m_displayMetricsScreenWidthPixels = screenWidthPixels;
m_displayMetricsScreenHeightPixels = screenHeightPixels;
@@ -698,6 +685,7 @@ public class QtNative
m_displayMetricsYDpi = YDpi;
m_displayMetricsScaledDensity = scaledDensity;
m_displayMetricsDensity = density;
+ m_displayMetricsRefreshRate = refreshRate;
}
}
}
@@ -1368,17 +1356,13 @@ public class QtNative
}
// screen methods
- public static native void setDisplayMetrics(int screenWidthPixels,
- int screenHeightPixels,
- int availableLeftPixels,
- int availableTopPixels,
- int availableWidthPixels,
- int availableHeightPixels,
- double XDpi,
- double YDpi,
- double scaledDensity,
- double density);
+ public static native void setDisplayMetrics(int screenWidthPixels, int screenHeightPixels,
+ int availableLeftPixels, int availableTopPixels,
+ int availableWidthPixels, int availableHeightPixels,
+ double XDpi, double YDpi, double scaledDensity,
+ double density, float refreshRate);
public static native void handleOrientationChanged(int newRotation, int nativeOrientation);
+ public static native void handleRefreshRateChanged(float refreshRate);
// screen methods
// pointer methods
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
index 2fbc4a70be..e0195b2bd2 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
@@ -116,7 +116,7 @@ public class QtServiceDelegate
QtNative.setService(m_service, this);
QtNative.setClassLoader(classLoader);
- QtNative.setApplicationDisplayMetrics(10, 10, 0, 0, 10, 10, 120, 120, 1.0, 1.0);
+ QtNative.setApplicationDisplayMetrics(10, 10, 0, 0, 10, 10, 120, 120, 1.0, 1.0, 60.0f);
if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) {
for (String className :