From ea91177144cd4a11632893818c06e27c305aa4fd Mon Sep 17 00:00:00 2001 From: Rami Potinkara Date: Fri, 17 Dec 2021 08:04:00 +0000 Subject: Revert "Android: Fix screen flicker issues" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6bbba5576c9477c61721bc4fbb761752d98c23d2. Reason for revert regression case QTBUG-97503 Task-number: QTBUG-97503 Change-Id: I455c3fa15d008df55b32bc39144776e0347b21cd Reviewed-by: Pekka Gehör Reviewed-by: Assam Boudjelthia --- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java') 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 5792b5b2f5..1213361fb7 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -613,8 +613,7 @@ public class QtNative m_displayMetricsXDpi, m_displayMetricsYDpi, m_displayMetricsScaledDensity, - m_displayMetricsDensity, - true); + m_displayMetricsDensity); } }); m_qtThread.post(new Runnable() { @@ -636,8 +635,7 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density, - boolean forceUpdate) + double density) { /* Fix buggy dpi report */ if (XDpi < android.util.DisplayMetrics.DENSITY_LOW) @@ -654,8 +652,7 @@ public class QtNative XDpi, YDpi, scaledDensity, - density, - forceUpdate); + density); } else { m_displayMetricsScreenWidthPixels = screenWidthPixels; m_displayMetricsScreenHeightPixels = screenHeightPixels; @@ -1343,8 +1340,7 @@ public class QtNative double XDpi, double YDpi, double scaledDensity, - double density, - boolean forceUpdate); + double density); public static native void handleOrientationChanged(int newRotation, int nativeOrientation); // screen methods -- cgit v1.2.3 From aa06466863edf27a006bff902ef3e51626b49890 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Fri, 28 Jan 2022 13:29:32 +0100 Subject: [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 (cherry picked from commit c1a93b20ff1fec370b2483276b74f07eb54486ef) --- .../src/org/qtproject/qt5/android/QtNative.java | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java') 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 -- cgit v1.2.3 From 73792bceef721e890c8655249412f9e26db94691 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Thu, 10 Feb 2022 10:33:48 +0100 Subject: Android: extract parentId for hidden object in advance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit amends 850a7f1238e84b6960a84e12687e40cf939a44d9. We can't extract the parentId for the hidden object on Java side, because the Java call is executed in a separate thread, so the original hidden object can be destroyed somewhere in the middle of parentId() call. As a workaround, we get the parentId in advance, on C++ side, and pass it as a parameter to JNI function. Task-number: QTBUG-95764 Change-Id: Ied2ab4ab39b947f3f582575cf77cc76fbac9e274 Reviewed-by: Jarkko Koivikko Reviewed-by: Jan Arve Sæther Reviewed-by: Rami Potinkara Reviewed-by: Assam Boudjelthia (cherry picked from commit 6d00aac1092d813446a44fbb234995733233f003) --- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java') 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 f4c48faa8e..b187e837c1 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -950,13 +950,13 @@ public class QtNative }); } - private static void notifyObjectHide(final int viewId) + private static void notifyObjectHide(final int viewId, final int parentId) { runAction(new Runnable() { @Override public void run() { if (m_activityDelegate != null) { - m_activityDelegate.notifyObjectHide(viewId); + m_activityDelegate.notifyObjectHide(viewId, parentId); } } }); -- cgit v1.2.3 From f546e3e7c98f1aced03ebf1f467ac1a04c579824 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Thu, 10 Feb 2022 11:53:24 +0100 Subject: Android A11Y: handle valueChanged events Before this patch Android A11Y implementation was missing ValueChanged event handling. As a result, no update was given when the element's value was changed. Handling these events allows us to announce value changes on such objects like Slider, SpinBox, etc... This is a universal method of value-change announcement, so it supports all sorts of A11Y gestures. On the Java side a new function was introduced to announce the values, because we need to use the actual element's *value*, not its accessible name or description. Task-number: QTBUG-93396 Change-Id: Ic44abd5f01b9b6f5468962131466edaf6a49d498 Reviewed-by: Assam Boudjelthia Reviewed-by: Rami Potinkara (cherry picked from commit b238f83380dcaa2830999a8f413f4b648db80beb) --- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java') 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 b187e837c1..6742a3781b 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -974,6 +974,18 @@ public class QtNative }); } + private static void notifyValueChanged(final int viewId, final String value) + { + runAction(new Runnable() { + @Override + public void run() { + if (m_activityDelegate != null) { + m_activityDelegate.notifyValueChanged(viewId, value); + } + } + }); + } + public static void notifyQtAndroidPluginRunning(final boolean running) { m_activityDelegate.notifyQtAndroidPluginRunning(running); -- cgit v1.2.3 From 879c14e9ff118a2ccb4f21428adbf4288bb5b13e Mon Sep 17 00:00:00 2001 From: Mike Achtelik Date: Wed, 4 Aug 2021 14:30:34 +0200 Subject: Android: Treat ACTION_CANCEL as TouchCancelEvent Change 64d62c53c1e92a1cc07449a0ea3c71501592c1e7 started treating an ACTION_CANCEL as a TouchPointReleased. This leads to unintentional presses, if e.g. an edge swipe for the android back gesture starts on a MouseArea. When Android takes possession of the motion, an ACTION_CANCEL is delivered, which needs to be handled as such. It should not be treated as a normal up event that triggers a press. Otherwise, we get the above-mentioned issue, where an unintentional action is performed. So let's use QWindowSystemInterface::handleTouchCancelEvent to treat it as a canceled touch in Qt. Task-number: QTBUG-72110 Change-Id: I68650a180130501568e5a1e9a7f20ea469461e97 Reviewed-by: Assam Boudjelthia Reviewed-by: Shawn Rutledge (cherry picked from commit d6da61f3b9e7e57e85d1e16f2756a8e39e571f77) --- src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java') 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 6742a3781b..b077014b81 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -708,9 +708,11 @@ public class QtNative } return 1; } - if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN && index == event.getActionIndex()) { + if (action == MotionEvent.ACTION_DOWN + || action == MotionEvent.ACTION_POINTER_DOWN && index == event.getActionIndex()) { return 0; - } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_POINTER_UP && index == event.getActionIndex()) { + } else if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_POINTER_UP && index == event.getActionIndex()) { return 3; } return 2; @@ -762,6 +764,10 @@ public class QtNative touchEnd(id, 2); break; + case MotionEvent.ACTION_CANCEL: + touchCancel(id); + break; + default: touchEnd(id, 1); } @@ -1365,6 +1371,7 @@ public class QtNative public static native void touchBegin(int winId); public static native void touchAdd(int winId, int pointerId, int action, boolean primary, int x, int y, float major, float minor, float rotation, float pressure); public static native void touchEnd(int winId, int action); + public static native void touchCancel(int winId); public static native void longPress(int winId, int x, int y); // pointer methods -- cgit v1.2.3