diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2022-01-28 13:29:32 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2022-01-31 11:28:14 +0100 |
commit | aa06466863edf27a006bff902ef3e51626b49890 (patch) | |
tree | d37f53c60d77c0bb6c500a5c1f1c1c5b320c0be0 /src/android | |
parent | 6c0ed94a1b5b3d3f9d79008b897c69cc90cebfff (diff) |
[Android]: Handle the screen name, modes and refreshRate properly
Fixes: QTBUG-87136
Fixes: QTBUG-93823
Fixes: QTBUG-94959
Change-Id: Id480e22611ec949b5e3ee780fc695fb502a5950c
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit c1a93b20ff1fec370b2483276b74f07eb54486ef)
Diffstat (limited to 'src/android')
4 files changed, 33 insertions, 15 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 16f3ea0c4d..0bb66b8a2d 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/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; @@ -677,8 +678,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 @@ -809,6 +815,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/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java index f22b8176c8..0d370a51f1 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java @@ -42,8 +42,10 @@ package org.qtproject.qt5.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; @@ -70,9 +72,13 @@ public class QtLayout extends ViewGroup protected void onSizeChanged (int w, int h, int oldw, int oldh) { DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics); + Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? ((Activity)getContext()).getWindowManager().getDefaultDisplay() + : ((Activity)getContext()).getDisplay(); + display.getMetrics(metrics); QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h, - metrics.xdpi, metrics.ydpi, metrics.scaledDensity, metrics.density); + metrics.xdpi, metrics.ydpi, metrics.scaledDensity, + metrics.density, display.getRefreshRate()); if (m_startApplicationRunnable != null) { m_startApplicationRunnable.run(); m_startApplicationRunnable = null; diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 1213361fb7..f4c48faa8e 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -103,6 +103,7 @@ public class QtNative private static int m_displayMetricsScreenHeightPixels = 0; private static int m_displayMetricsDesktopWidthPixels = 0; private static int m_displayMetricsDesktopHeightPixels = 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; @@ -613,7 +614,8 @@ public class QtNative m_displayMetricsXDpi, m_displayMetricsYDpi, m_displayMetricsScaledDensity, - m_displayMetricsDensity); + m_displayMetricsDensity, + m_displayMetricsRefreshRate); } }); m_qtThread.post(new Runnable() { @@ -635,7 +637,8 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density) + double density, + float refreshRate) { /* Fix buggy dpi report */ if (XDpi < android.util.DisplayMetrics.DENSITY_LOW) @@ -645,14 +648,9 @@ public class QtNative synchronized (m_mainActivityMutex) { if (m_started) { - setDisplayMetrics(screenWidthPixels, - screenHeightPixels, - desktopWidthPixels, - desktopHeightPixels, - XDpi, - YDpi, - scaledDensity, - density); + setDisplayMetrics(screenWidthPixels, screenHeightPixels, desktopWidthPixels, + desktopHeightPixels, XDpi, YDpi, scaledDensity, density, + refreshRate); } else { m_displayMetricsScreenWidthPixels = screenWidthPixels; m_displayMetricsScreenHeightPixels = screenHeightPixels; @@ -662,6 +660,7 @@ public class QtNative m_displayMetricsYDpi = YDpi; m_displayMetricsScaledDensity = scaledDensity; m_displayMetricsDensity = density; + m_displayMetricsRefreshRate = refreshRate; } } } @@ -1340,8 +1339,10 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density); + 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/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java index 1da377c2ba..732a58c6fe 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java @@ -115,7 +115,7 @@ public class QtServiceDelegate QtNative.setService(m_service, this); QtNative.setClassLoader(classLoader); - QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0); + QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0, 60.0f); if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) { for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) { |