History log of /frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
a0260a17093d3f65871564505c508d9fcd190d67 17-May-2017 Phil Weaver <pweaver@google.com> Stop system process crash in TouchExplorer

We need to straighten out this state machine so we can
fix bugs in it without a high risk of creating others
(b/38246304). In the meantime, catching this exception at
least allows the device to keep operating.

Bug: 37338581
Test: Reproduced the conditions of the crash. Verified that
we now print the log message.

Change-Id: I1f4f84b5529b2bf638e225d474808e3d42484e78
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
0adfbd33c884ce80ebe161428d7a8ae9e6aced03 17-Feb-2017 Phil Weaver <pweaver@google.com> Use accessibility action for touch exploration

Explore-By-Touch has been dispatching touch events to the screen
rather than using the accessibility API. This was intended as a
workaround for apps that did not properly handle accessibility,
but the workaround itself has been causing bugs in corner cases
where properly accessible Views are partially covered by windows.

This CL first tries to dispatch a click action, and falls back on
the touch dispatch only if the click action fails.

Bug: 35200501
Bug: 26216304
Bug: 20665958
Bug: 34949365
Bug: 34844480
Bug: 29535082

Test: Poking around with first party apps and TalkBack works fine.
This behavior isn't covered by automated testing.

Change-Id: I9cc18399d8f40f7381dfcbef91b5991b711bb7f1
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
ec1783828e541f22e93e67ec80511b9187bc93be 13-May-2016 Zachary Kuznia <zork@google.com> Ensure MotionEvent.split() won't be given an invalid value.

b/27496784

Change-Id: I28bb4ac5bb8a705e7af9b22b2b56cd4061aa06a0
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
fd6aa8a1fa6345030c382d7f2d9eac456b425f55 12-Mar-2016 Zachary Kuznia <zork@google.com> Fix double tap issue in TouchExplorer

In certain conditions, the first tap in a double tap could be detected
as Touch Exploration. This ensures that cannot occur.

Change-Id: I20941be54413534d9dc74e5a3152c27dd0c998fe
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
bf1cf52663414eec1d80d23edc029bf6223adb3b 24-Feb-2016 Zachary Kuznia <zork@google.com> Ensure AccessibilityGestureDetector only returns true when a
callback returned true.

b/26987664

Change-Id: I52687120f784ec958802a9c93b767c2b8f6a7e38
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
0bc3cc9c2fdc18eb305088adb9be72953df14473 18-Feb-2016 Zachary Kuznia <zork@google.com> Fix crash when cancelling an accessibility gesture with ACTION_UP.

b/27090049

Change-Id: I7a5b65c4e96513539d820c9a2bef99272fb24680
(cherry picked from commit 3951e3547f2ebb5ec228b8776855e9f244b1e9e9)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
9254b3e336a01ff79742882bd98860b48ebae379 21-Jan-2016 Zachary Kuznia <zork@google.com> Make AccessibilityGestureDetector handle gesture detection start and end.

Change-Id: I2c1861d5d6c5c0dc921e62f03ee6283f1f7a62b6
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
407df712e2a381e0227eb780786128a50bfcf5f5 16-Oct-2015 Zachary Kuznia <zork@google.com> Move stroke buffer and gesture recognition out of TouchExplorer.

This also adds a return value to the callbacks on
AccessibilityGestureDetector.Listener, so that the listener can indicate if the
event has been consumed, and processing should be halted.

b/25021896

Change-Id: If4d366ff207c1cebd0e3f7dab5f27a2037ddb510
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
c18f2fdfcf8ec7a8534c032c4102739edb7f1c5e 29-Sep-2015 Zachary Kuznia <zork@google.com> Encapsulate a11y gesture detection in an external class.

Change-Id: I59e0c25c06ba296822c7afb9f8623989986fde96
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
c78d64132228f1771f4df690e9c8b4e47e0d3eca 25-Sep-2015 Zachary Kuznia <zork@google.com> Use the standard GestureDetector to handle double tap and hold in TouchExplorer.

b/24407329

Change-Id: I1cbd1a232bd642eb9bf87548b1a3d1afe48a9bed
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
c052c635eebaccebc099bb107ad7846df54ab2ad 24-Sep-2015 Zachary Kuznia <zork@google.com> Use the standard GestureDetector for Double Taps in TouchExplorer

b/24339804

Change-Id: I96fa1287fa941178fb9970ceb34d95a3604e6815
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
976724e81bca33dc48347f88633a37a195b9e4ea 01-Sep-2015 Toni Barzic <tbarzic@google.com> Feed mouse and keyboard events to EventStreamTransformation

Updates AccessibilityInputFilter to pass keyboard and mouse events
through enabed EventStreamTransformations.

This is done in preparation for implementing Autoclick on mouse stop
feature, which depends on those events.

Existing EventStreamTransformation implementstions are modified to
non touchscreen motion events and key board events.

Adds stub EventStreamTransformation (AutoclickController) that will
be used to implement autoclick feature.

Implements key event filtering as a separate EventStreamTransformation
(instead of doing it directly in AccessibilityInputFilter).

Introduces private EventStreamState classes to AccessibilityInputFilter,
which keep track of whether event sequences for different input sources
have started, and help reduce code duplication when determining whether
an event should be fed to registered EventStreamTransformers.

BUG=23113412

Change-Id: If115799bbe4debce48689370ff5ea9fa6dab9639
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
ded133c446fa9d0d23e6bde19a66fb2ce3980491 31-Jan-2015 Svetoslav <svetoslavganov@google.com> Fix broken activation of the selected view in accessibility mode.

We were using an approximation to determine where to send a pair of down
and up events to click on the view that has accessibility focus. We were
doing reverse computation to figuring out which portion of the view is
not covered by interactive views and get a point in this region. However,
determining whether a view is interactive is not feasible in general since
for example may override onTouchEvent. This results in views not being
activated or which is worse wrong views being activated.

This change swithes to a new approach to activate views in accessibility
mode which is guaranteed to always work except the very rare case of a
view that overrides dispatchTouchEvent (which developers shouldn't be
doing). The new approach is to flag the down and up events pair sent
by the touch explorer as targeting the accessibility focused view. Such
events are dispatched such that views predecessors of the accessibility
focus do not handle them guaranteeing that these events reach the accessibiliy
focused view. Once the accessibiliy focused view gets such an event it clears
the flag and the event is dispatched following the normal event dispatch
semantics.

The new approach is semantically equivalent to requesting the view to perform
a click accessiblitiy action but is more generic as it is not affected by
views not implementing click action support correctly.

bug:18986806
bug:18889611

Change-Id: Id4b7b886c9fd34f7eb11e606636d8e3bab122869
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
47b9c1524fe20b9ae2b210acdcad64f764df68e0 04-Oct-2014 Svetoslav <svetoslavganov@google.com> TouchExploer computes incorrectly the click location.

If there is accessibilty focus and the user touch explores
location that does not change accessibility focus that is
not in the app window, e.g. system bar, double tap does not
click on the system UI affordance.

bug:17588024

Change-Id: I6c8c0f65b208ae1d3f31d7f06b0721dc223ec19f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
76716c5a180aa471c6973ca7aa03c7f2da677823 03-Oct-2014 Svetoslav Ganov <svetoslavganov@google.com> Revert "TouchExplorer computes incorrectly the click location."

This reverts commit 851a5059a47cbf76e530c9d050a677cb6e3f8657 as
it creates a regression. Let us revert this and correctly fix the
issue the original change was trying to address.

bug:17789608

Change-Id: I8abb1a61d5310430e839e4ef60e7ca5cc0cbdd80
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
8d412fe18b9ce8cf71ce57c380e7f312e4667667 20-Sep-2014 Svetoslav <svetoslavganov@google.com> TouchExploer computes incorectly the click location.

If there is accessibilty focus and the user touch explores
location that does not change accessibility focus that is
not in the app window, e.g. system bar, double tap does not
click on the system UI affordance. This is due to obsolete
logic from the time where accessibility focus was only in
the active window at the time of double clicking.

bug:17588024

Change-Id: Ib780103e873d8a2afd3b35de3227d54116f1a1b0
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
7498efdc5e163d6b4a11db941c7d13c169d37284 04-Sep-2014 Svet Ganov <svetoslavganov@google.com> Clicking on partially coverd views by other views or windows.

In touch exploration mode an accessibility service can move
accessibility focus in response to user gestures. In this case
when the user double-taps the system is sending down and up
events at the center of the acessibility focused view. This
works fine until the clicked view's center is covered by another
clickable view. In such a scenario the user thinks he is clicking
on one view but the click is handled by another. Terrible.

This change solves the problem of clicking on the wrong view
and also solves the problem of clicking on the wrong window.
The key idea is that when the system detects a double tap or
a double tap and hold it asks the accessibility focused node
(if such) to compute a point at which a click can be performed.
In respinse to that the node is asking the source view to
compute this.

If a view is partially covered by siblings or siblings of
predecessors that are clickable, the click point will be
properly computed to ensure the click occurs on the desired
view. The click point is also bounded in the interactive
part of the host window.

The current approach has rare edge cases that may produce false
positives or false negatives. For example, a portion of the
view may be covered by an interactive descendant of a
predecessor, which we do not compute (we check only siblings of
predecessors). Also a view may be handling raw touch events
instead of registering click listeners, which we cannot compute.
Despite these limitations this approach will work most of the
time and it is a huge improvement over just blindly sending
the down and up events in the center of the view.

Note that the additional computational complexity is incurred
only when the user wants to click on the accessibility focused
view which is very a rare event and this is a good tradeoff.

bug:15696993

Change-Id: I85927a77d6c24f7550b0d5f9f762722a8230830f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
d2b3e034d157104a0fe4542193a7694f9034efce 04-Sep-2014 Alan Viverette <alanv@google.com> Don't switch to touch exploring state on pointer up

BUG: 17388688
Change-Id: I146aa2290acf0a587eaccafa5a208ee1cbd84aa5
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
dc6d1a9cc3a23c26c786a732e729fdd418b57d29 29-Aug-2014 Svetoslav <svetoslavganov@google.com> Fix the global gesture to enable accessibility.

1. There was a bug in the touch explorer which was crashing almost
every time after accessibility was enabled via the gesture. The
problem was that in dragging state when a finger goes up we were
not transitioning to touch exploring state.

2. The global actions dialog was not going away after enabling
accessibility while it should as the user brought it up to
turn accessibility on rather to interact with global actions.

bug:15254250

Change-Id: Iaa45f758e09566822775b53e87d2980138e85ef9
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
1e0d4af9986c8c2a658769a63bf8b385d25e0435 11-Apr-2014 Svetoslav <svetoslavganov@google.com> Adding system support for a single accessibility focus.

Now that we have APIs to query all interactive windows and allow
an accessibility service to put accessibility focus in each of
them we have to guarantee that there is a single accessibility
focus. This is required for correct operation of the touch
explorer as on double tap in clicks in the center of the focused
area, hence having more that one focus is an issue. Also the
system is maintaining a single input focus so now accessibility
focus behaves consistently with that.

bug:13965563

Change-Id: I0b5c26dadfabbf80dbed8dc4602073aa575ac179
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
9158825f9c41869689d6b1786d7c7aa8bdd524ce 22-Nov-2013 Amith Yamasani <yamasani@google.com> Move some system services to separate directories

Refactored the directory structure so that services can be optionally
excluded. This is step 1. Will be followed by another change that makes
it possible to remove services from the build.

Change-Id: Ideacedfd34b5e213217ad3ff4ebb21c4a8e73f85
/frameworks/base/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java