I found this hole while looking for a solution to a bug when
magnification was enabled when TalkBack was running. I believe
what was happening was that enabling/disabling magnification
resets the AccessibilityInputFilter. The filter batches MotionEvents
for processing with a choreographer, but the disable/enable cycle
when magnification gets enabled could disrupt the event stream.
This change flushes the batched events before objects using them
are disabled.
I've tried a variety of things, but I'm not able to reproduce the
bug on NYC using the same procedure. I suspect that either the
timing of the events is different, or the newer gesture detection
in TalkBack is protecting it somehow. The hole remains, though,
and could create invalid streams of MotionEvents without this fix.
Bug: 26613222
Change-Id: Ie9f3da459929397596e0a80a61d5c7f191001ee8
Closing two small holes in the implementation:
1. The gesture was dispatched before the callback was registered. It
was possible for gestures that failed quickly to fail to report any
status.
2. Gestures could be dispatched before the input filter was
installed. Adding a wait to give the filter a chance to install
before reporting a failure.
Also removing an unused method on the input filter.
Change-Id: I77cd80dcd2cec6c72b3761169aba5eaecf62250b
(cherry picked from commit 03465fb874ccf35ead2228b66ec03afc31d7694e)
Fix two bugs: one where Instrumentation did not properly
handle destroyed UiAutomations, another where UiAutomation
did not properly disable running accessibility services.
Change-Id: I1773dbd373f4d5b0e7c9917ff18d8d9b1a0e07c7
(cherry picked from commit 846522cea043d3113b3b96daa8f3a1b70e3beb5e)
This increases the tolerace for detecting a user interaction as a
gesture in Touch exploration mode. The detection should also be more
consistant between devices, as the threshold is based on physical
units.
Change-Id: Iec935e862d2634fba0fea6dc6d81e62ed2213cbc
Adding a flag to AccessibilityServiceInfo that only works
for UIAutomator that supresses other services. This flag
is set by default for UIAutomation to match the current
behavior, but tests may clear the flag and enable other
services.
Needed to improve cts coverage of AccessibilityService.
Bug: 26592034
Change-Id: Icfc2833c1bd6546a22a169008d88a6b15e83989c
The accessibility manager service changes secure settings without
clearing binder calling identnty. Luckily it worked for a long
time as the calls resulting in a secure setting change were not
made on a binder thread. Now we clear calling identity before
mutating secure settings - note that we alsways do this after
a security check, hece it is safe.
bug:26766532
Change-Id: Icb188e6de1a134f38de0bdb23c67fa4ff2806ba4
UiAutomationConnection.clearWindowContentFrameStats method currently clears
calling identity before calling mAccessibilityManager.getWindowToken. This
doesn't work properly when a call is made by a secondary user, because it
wouldn't pass a check in getWindowToken. This is now fixed by explicitly
passing ID of the calling user.
Bug: 26498396
Change-Id: I8f0cdde33e18f04adb1833c6c0d0c329de921018
Add public APIs to describe gestures and dispatch them from
an accessibility service. Added a new capability that
services must declare to have this capability.
Bug: 22514086
Change-Id: I9bff2d9335f0310115112d14b7ed033a6d6c2393
Send AccessibilityEvents to all accessibility services
that request them. No longer refuse to send them to
services with the same feedback type.
Change-Id: I137905c24fc75c075ab938175ecb6ea5f39112cf
Introducing a new class to manage key event dispatch
that sends all events to all classes that request them.
Bug:22332500, 22515057
Change-Id: I8521f6257a4ac6c8f2eff14186789630d680ff11
Also separates magnification state and touch event handling. Moves
callbacks for window manager changes and display state changes into
the magnification controller.
Bug: 22718911
Change-Id: I3a8ba060a07d8f1f51856855a5f85601766fd45d
The spec property requires an accessible getter and setter. This code
will be removed in a following CL that refactors magnification spec
animation.
Change-Id: Ia8fecf98700d18e62ae30aa437b81b061c9a9542
First step in moving ownership to AccessibilityServiceManager so that we
can implement the magnification control APIs.
The magnification Region and the current/sent MagnificationSpecs are now
private to the controller, and all access is handled through accessor
methods. Comments have been added to all public accessor methods.
Bug: 22718911
Change-Id: Ia50ee93513785585aac5424543fc1d730b84bd90
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
The goal is to make this value shareable with Settings code (without
adding dependency on com.android.server)
Change-Id: Ic41af575dcf8081de69bdcdb20fba430bcf3257e
Makes AccessibiilityInputFilter aware of current user ID, and pasess the
user ID to event stream filters that have per-user parameters:
- AutoclickController -> for per-user autoclick delay
- ScreenMagnifier -> for magnification scale
While doing this, make AccessibilityInputFilter.disableFeatures private,
and replace usage in AccessibilityManagerService with
setUserAndEnabledFeatures with feature flags set to 0:
Using disableFatures directly leaves input filter in inconsistent state
where internal mEnabledFeatures flags don't match real state of enabled
features.
BUG=23113412
BUG=24265227
Change-Id: Ib295f4c08de1a3743e55714459844b6d80787637
This was originally introduced in change id
Idd8539ffed7ba4892c5a916bd34910fd2ef50f75 to fix an issue with touch event
handling in TouchExplorer. The original issue has been fixed, so this
workaround is no longer needed.
b/24470877
Change-Id: Ie2a782b162b837e9bdc4904a486ed292989f83d8
When there is docked stack, we want to show a "handle" through which the
user will resize the docked stack. We add it from the system process,
because we want to avoid IPC calls.
Change-Id: If15fd2a0fcb7077446d1ba6c533acb3028a42039
Instead of hardcoding autoclick delay, use
Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY value.
Adds logic for observing the setting's changes and updating the delay
that should be used when scheduling automatical click.
BUG=23113412
Change-Id: Iffe3df0cb64ab28f13d2803d01d581280aedf422
Settings in question are:
- accessibility_autoclick_enabled -> Whether the feature is enabled
- accessibility_autoclick_delay -> Amount of time mouse pointer has to
stay still before performing click
Enable/disabled AutoclickController event stream transformation (which
implements the feature) based on the accessibiilty_autoclick_enabled
value
BUG=23113412
Change-Id: I8178d10c09d86713bb4c725c95268a7c5f432eb4
The event stream transformer (AutoclickControlelr) observes motion
events from mouse in order to detect mouse movement. Once movement
is detected, a click event sequence gets scheduled with a delay. The
scheduled click gets rescheduled on every further detected mouse
movement, so the click is performed only when mouse movement stops.
Mouse movement detection has tolerance to jitter that may be caused
by user's poor motor control (that may prevent click ever being triggered
when mouse gets to target, or unwanted clicks when mouse is stationary).
Clicks are scheduled by posting delayed tasks to main loop. When
rescheduling click, previous tasks is not always removed and a new
created. Instead, if possible, new task is scheduled when previous,
delayed task is run. In order to do this, click scheduler keeps track
of scheduled click time and, when scheduled task is run, checks that
scheduled time is not greater than the current time (if it is, a new
delayed task is scheduled).
Detecting events from other input source types, or mouse events other
than movement (like clicks, scroll) cancels the scheduled click.
BUG=23113412
Change-Id: I8a72e768cd45cccb93c19476fe6e2c23e8e84f27
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
I need to make some changes to get the tests pass. First a11y service
will now disable when no service is specified, I need to re-enable
a11y after services are enabled. Second the old event used in tests
seems to be filtered out by the service, I need to pick a new event.
Also the timeout waiting for mock service to start is extended, I hit
the old timeout quite often with N9.
Bug: 19913735
Change-Id: I8fe1b7b5d93b6a52df0a8940a08761ea5fbf5084
This CL checks for the return value for Rect.intersect(Rect) for whether
there is actually an intersection before taking the calling rect as the
intersection. In the case of no intersection (Rect.intersect(Rect) returns
false), the calling rect would not have been changed, so here in this CL
it will be manually set empty.
Bug: 7368679
Change-Id: I7494c1a1649eca09e34412f0a59b795e8b3a82aa
Now that we have a separate foreground service proc state
(above a sleeping top app), update various system services
to put their bindings into this state when appropriate.
There are two new bind flags for this -- one that just always
makes it a foreground service, another that only does it when
the device is awake (useful for things like the wallpaper).
And with all of that, tweak network policy manager to only
include apps that are at least foreground service state when
in power save and device idle modes. This will allow us to
further reduce the set of apps that have network access
(in particular not giving access to the current top app when
the screen is off), hopefully leading to even better battery
life.
Change-Id: I91d85a5c5ed64e856149e9a5d94a634a7925ec7f