Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
None
-
5.10.0, 5.10.1, 5.11.0, 5.11.1, 5.11.2, 5.12.0 RC, 5.12.1, 5.12.2, 5.13.0 Beta 1, 5.15
-
-
64d62c53c1e92a1cc07449a0ea3c71501592c1e7 (qt/qtbase/dev) 82121b2fbf80fc39d8a7bab9e8e9a8c545f1ffd3 (qt/qtbase/5.15)
Description
<UDPATE>
Thanks to srutledg’s help, I found what causes this bug.
Modern Android devices can recognize certain hand gestures (see attached pictures). For example:
- on Xiaomi and Huawei devices you can take a screenshot by sliding 3 fingers down
- on Samsung devices you can take a screenshot by swiping the edge of your hand across the screen [called: Palm swipe].
- on Samsung devices you can mute incoming calls or alarms by putting your hand over the screen [called: Easy mute].
Probably the following happens:
- The MouseArea captures the Press event.
- The OS recognizes it as a gesture, not a touch.
"Xiaomi: D ViewRootImpl: cancle motionEvent because of threeGesture detecting" - The MouseArea never gets notified that the Press was cancelled due to gesture recognition.
</UDPATE>
On android devices the MouseArea becomes irreversibly unresponsive if touched in an unusual way.
Tested devices:
FAILED: Samsung Galaxy TAB A 2016 (SM-T585) – Android 7.0
- Touching with palm: https://youtu.be/yhQXaVbgCeo
- Touching with side of hand: https://youtu.be/4bUE5iYczUY
FAILED: Xiaomi Redmi Note 5 Pro – Android 8.1.0
- Sliding three fingers: https://youtu.be/bv_QMBVvoLY
FAILED: Huawei P9 Lite (2017) – Android 8.0.
- Sliding multiple fingers: https://youtu.be/oh7a7TH-ZTI
FAILED: Samsung Galaxy Edge S7 – Android 8.0.
- Touching with side of hand: https://youtu.be/HEVyS1CEhs0
FAILED: Samsung Galaxy A7 2015 – Android 6.0.1
OK: Lenovo Moto Z – Android 8.0
OK: OnePlus 5 – Android 8.1
OK: Samsung Galaxy Tab 3 Lite (SM-T110) – Android 4.2.2
OK: Asus Nexus 7 (2012) – Android 5.1.1
OK: Vodafone Smart Mini – Android 4.1.1
The error message:
W libMouseTest.so: (null):0 ((null)): TouchPointPressed without previous release event QQuickEventPoint(accepted:false state:Pressed scenePos:QPointF(714.667,504.667) id:2000001 timeHeld:0)
I attach an example project and a test apk built with Qt 5.12.0 RC2.
This bug is a big problem for my users living with movement disability as the program freezes easily after a not well-controlled touch. Please help me solve this issue. Any quick workaround would be much appreciated as hundreds of my users have reported this problem.
Attachments
For Gerrit Dashboard: QTBUG-72110 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
321599,4 | Android: Treat ACTION_CANCEL as TouchPointReleased | 5.15 | qt/qtbase | Status: MERGED | +2 | 0 |
321643,2 | Android: Treat ACTION_CANCEL as TouchPointReleased | dev | qt/qtbase | Status: ABANDONED | 0 | 0 |
321748,2 | Android: Treat ACTION_CANCEL as TouchPointReleased | dev | qt/qtbase | Status: MERGED | +2 | 0 |
363366,4 | Android: Treat ACTION_CANCEL as TouchCancelEvent | dev | qt/qtbase | Status: MERGED | +2 | 0 |
370311,1 | QQDeliveryAgent: Cancel touch as mouse on TouchCancel | dev | qt/qtdeclarative | Status: ABANDONED | -1 | 0 |
378514,6 | deliveryagent: cancel touch-mouse synthesis when cancelling touch event | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
378990,2 | deliveryagent: cancel touch-mouse synthesis when cancelling touch event | 6.2 | qt/qtdeclarative | Status: MERGED | +2 | 0 |
379054,2 | Android: Treat ACTION_CANCEL as TouchCancelEvent | 6.2 | qt/qtbase | Status: MERGED | +2 | 0 |
379056,7 | Android: Treat ACTION_CANCEL as TouchCancelEvent | tqtc/lts-5.15 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |