[gesture recognition] Implement improved edge gesture detection to reduce false positives and pass non-edge gestures through to the focused app
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ubuntu UX |
Fix Released
|
Critical
|
John Lea | ||
unity8 (Ubuntu) |
Fix Released
|
Critical
|
Daniel d'Andrada | ||
unity8 (Ubuntu RTM) |
Fix Released
|
Critical
|
Daniel d'Andrada |
Bug Description
(from section "3.1 Edge drag gestures" in the "Unity Gesture UI Guidelines" doc https:/
These are Unity level gestures that allow the user to reveal and interact with shell elements like the Launcher. To reduce the number of false positives, edge drag gestures are only triggered when a user drags their finger over the edge of the screen and the drag does not have following charastics:
- If the initial velocity is zero or close to zero an edge gesture is not triggered. The gesture is passed through to the app. This is because the intended gesture is probably a tap or a hold
- If the initial velocity is high an edge gesture is not triggered. The gesture is passed through to the app. This is because the intended gesture is probably a flick
- If the initial direction is not close to perpendicular to the edge an edge gesture is not triggered. This is because the intended gesture may be a vertical drag.
- If at the gesture’s initiation the user has more than one finger touching the screen an edge gesture is not triggered. This is because the intended gesture may be a pinch, spread or rotate.
-------
Desired resolution:
- Implement the heuristics defined above for detecting edge gestures to reduce the incidence of false positives.
- The exact values for these heuristics should be easily modifiable so that we can experiment with different values to find the optimal values.
- Gestures performed on the edge of the screen when are no longer detected as edge gestures due to the above heuristics should be passed through to the currently focused app.
Note: The solution must fix the problem described in bug 1350881
Related branches
- Albert Astals Cid (community): Approve
- PS Jenkins bot (community): Needs Fixing (continuous-integration)
- kevin gunn (community): Needs Fixing
-
Diff: 6741 lines (+4656/-503)79 files modifiedCMakeLists.txt (+2/-0)
debian/control (+1/-1)
debian/unity8-private.install (+1/-0)
libs/CMakeLists.txt (+1/-0)
libs/UbuntuGestures/CMakeLists.txt (+40/-0)
libs/UbuntuGestures/CandidateInactivityTimer.cpp (+41/-0)
libs/UbuntuGestures/CandidateInactivityTimer.h (+49/-0)
libs/UbuntuGestures/DebugHelpers.cpp (+68/-0)
libs/UbuntuGestures/DebugHelpers.h (+29/-0)
libs/UbuntuGestures/Pool.h (+134/-0)
libs/UbuntuGestures/Timer.cpp (+109/-0)
libs/UbuntuGestures/Timer.h (+105/-0)
libs/UbuntuGestures/TouchOwnershipEvent.cpp (+35/-0)
libs/UbuntuGestures/TouchOwnershipEvent.h (+50/-0)
libs/UbuntuGestures/TouchRegistry.cpp (+500/-0)
libs/UbuntuGestures/TouchRegistry.h (+182/-0)
libs/UbuntuGestures/UbuntuGesturesGlobal.h (+23/-0)
libs/UbuntuGestures/UnownedTouchEvent.cpp (+39/-0)
libs/UbuntuGestures/UnownedTouchEvent.h (+45/-0)
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h (+2/-2)
plugins/Ubuntu/Gestures/CMakeLists.txt (+26/-7)
plugins/Ubuntu/Gestures/Direction.h (+2/-2)
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp (+335/-209)
plugins/Ubuntu/Gestures/DirectionalDragArea.h (+37/-29)
plugins/Ubuntu/Gestures/TimeSource.h (+2/-2)
plugins/Ubuntu/Gestures/TouchGate.cpp (+347/-0)
plugins/Ubuntu/Gestures/TouchGate.h (+126/-0)
plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.h (+3/-3)
plugins/Ubuntu/Gestures/plugin.cpp (+3/-1)
plugins/Ubuntu/Gestures/plugin.h (+1/-1)
plugins/Ubuntu/Gestures/qmldir (+1/-1)
qml/Components/DragHandle.qml (+2/-2)
qml/Components/EdgeDragArea.qml (+2/-0)
qml/Components/InputMethod.qml (+13/-0)
qml/Dash/Dash.qml (+29/-7)
qml/Dash/DashContent.qml (+4/-1)
qml/Dash/GenericScopeView.qml (+2/-0)
qml/Launcher/Launcher.qml (+3/-1)
qml/Launcher/LauncherPanel.qml (+1/-0)
qml/Stages/ApplicationWindow.qml (+0/-18)
qml/Stages/PhoneStage.qml (+14/-5)
qml/Stages/SessionContainer.qml (+1/-13)
qml/Stages/SurfaceContainer.qml (+38/-7)
src/CMakeLists.txt (+6/-0)
src/Dash/CMakeLists.txt (+5/-0)
src/Dash/main.cpp (+6/-0)
src/main.cpp (+5/-0)
tests/CMakeLists.txt (+1/-0)
tests/libs/CMakeLists.txt (+1/-0)
tests/libs/UbuntuGestures/CMakeLists.txt (+20/-0)
tests/libs/UbuntuGestures/tst_TouchRegistry.cpp (+803/-0)
tests/mocks/Unity/Application/CMakeLists.txt (+1/-0)
tests/mocks/Unity/Application/MirSurfaceItem.cpp (+18/-22)
tests/mocks/Unity/Application/MirSurfaceItem.h (+18/-1)
tests/mocks/Unity/Application/MirSurfaceItem.qml (+0/-12)
tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp (+28/-0)
tests/mocks/Unity/Application/UbuntuKeyboardInfo.h (+60/-0)
tests/mocks/Unity/Application/plugin.cpp (+7/-0)
tests/plugins/Ubuntu/Gestures/CMakeLists.txt (+9/-2)
tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml (+3/-0)
tests/plugins/Ubuntu/Gestures/touchGateExample.qml (+27/-0)
tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp (+494/-17)
tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qml (+1/-0)
tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp (+345/-0)
tests/qmltests/Components/CMakeLists.txt (+2/-1)
tests/qmltests/Components/tst_DragHandle.cpp (+14/-17)
tests/qmltests/Greeter/tst_SingleGreeter.qml (+1/-1)
tests/qmltests/Launcher/tst_Launcher.qml (+123/-107)
tests/qmltests/Stages/tst_ApplicationWindow.qml (+2/-2)
tests/qmltests/Stages/tst_PhoneStage.qml (+2/-1)
tests/qmltests/Stages/tst_SurfaceContainer.qml (+26/-1)
tests/qmltests/tst_Shell.qml (+118/-3)
tests/uqmlscene/CMakeLists.txt (+2/-0)
tests/uqmlscene/README (+3/-1)
tests/uqmlscene/main.cpp (+9/-0)
tests/utils/modules/Unity/Test/CMakeLists.txt (+2/-0)
tests/utils/modules/Unity/Test/UnityTestCase.qml (+2/-0)
tests/utils/modules/Unity/Test/testutil.cpp (+41/-2)
tests/utils/modules/Unity/Test/testutil.h (+3/-1)
Changed in ubuntu-ux: | |
assignee: | nobody → John Lea (johnlea) |
importance: | Undecided → Critical |
status: | New → Fix Committed |
Changed in unity8: | |
status: | New → Confirmed |
importance: | Undecided → Critical |
tags: | added: sabdfl-ux-requests |
tags: | added: rtm14 |
Changed in unity8 (Ubuntu): | |
importance: | Undecided → Critical |
assignee: | nobody → Daniel d'Andrada (dandrader) |
tags: | removed: rtm14 |
Changed in unity8: | |
importance: | Critical → Wishlist |
status: | Confirmed → Triaged |
Changed in unity8 (Ubuntu): | |
status: | Confirmed → Triaged |
Changed in unity8 (Ubuntu): | |
importance: | Critical → Wishlist |
no longer affects: | unity8 |
tags: | added: touch-2014-11-14 |
tags: |
added: touch-2014-11-13 removed: touch-2014-11-14 |
tags: |
added: ota-1 removed: touch-2014-11-13 |
Changed in unity8 (Ubuntu): | |
status: | Triaged → In Progress |
description: | updated |
description: | updated |
tags: | added: beta qa-daily-testing |
tags: | added: touch-2014-10-16 |
Changed in unity8 (Ubuntu RTM): | |
status: | New → In Progress |
assignee: | nobody → Daniel d'Andrada (dandrader) |
importance: | Undecided → Critical |
tags: | removed: ota-1 |
Changed in unity8 (Ubuntu RTM): | |
status: | In Progress → Fix Released |
Changed in ubuntu-ux: | |
status: | Fix Committed → Fix Released |
This is effectively the same as bug #1130102 :/